HeaderFieldとその下位クラス
ヘッダフィールドを表現するクラスです。
ヘッダの種類によって対応するクラスが違い、
例えば To: ヘッダはTMail::MaddrH クラスで表されます。
すべてのクラスは TMail モジュールの中に定義されています。
全てのヘッダは特性に実際のアクセスがあるまではヘッダの内容の解析をせず、
最初のアクセスでパースを行います。これによって実行速度(とメモリ)をかなり
節約できているのですが、反面、パーズエラーがどこでおきるかわからない
危険性も含んでいます。
0.7.6 からは TMail::Mail.new の引数によってこのときの
パースエラーを無視するようになりました。何もしないとパースエラーは
全て無視されるので、厳しい検査が必要なときは TMail::Mail.new( port, true )
のようにして生成してください。
0.8.5 からは、無限ループの可能性があるところだけはスレッドに対応しました。
ただし、ライブラリでは内容の保証まではしない(予定な)ので、
複数スレッドが同じ TMail に書きこみアクセスする可能性があるときは、
明示的にアプリケーション側でロックをかけてください。
スーパークラス
Object
クラスメソッド
- new( fname, fbody )
-
新しいヘッダフィールドを返します。
fnameはフィールド名、fbodyはフィールドボディです。
fnameによって、適切なクラスを生成します。
- new_header( port, fname, strict = false )
-
ポートから fname ヘッダフィールドだけを探して HeaderField
オブジェクトを生成します。ただし、複数フィールドが存在するもの
は最初の一つだけを生成します。また、与えられたポートに fname
フィールドが存在しないときは nil を返します。
メソッド
- name
-
フィールド名の複製を返します。
- encoded( eol = "\r\n", charset = 'j', ret = '', limit = 72 )
-
ヘッダ全体をエンコードした文字列を返します。
limit に整数を設定するとその桁数で折り返しを行い、
その時の行末コードに eol を使います。nil だとおりかえしをしません。
charset は文字コードの指定ですが、現在は j (JIS, iso-2022-jp) 以外は
正常に動作しません。
illegal? empty? も参照のこと。
- decoded( eol = "\n", charset = 'e', ret = '', limit = nil )
-
ヘッダ全体をデコードした文字列を返します。
limit に整数を設定するとその桁数で折り返しを行い、
その時の行末コードに eol を使います。nil だとおりかえしをしません。
illegal? empty? も参照のこと。
- body
-
デコードしたヘッダボディを返します。
illegal? empty? も参照のこと。
- empty?
-
本体が意味的に空文字列になるとき、真。
コメントなど本質的に意味をもたない部分はあっても空とみなされます。
- illegal?
-
内容が不正だと思われるとき、真。
illegal な時は文字列化が失敗する可能性があります。
StringHクラス
スーパークラス
HeaderField
対応ヘッダ
- Subject:
- Comments:
- Content-Description
- X-*:
メソッド
- body, body=( str )
-
フィールドボディです。
StructHクラス
'structured' (構造化)ヘッダを表す抽象クラスです。実体化してはいけません。
スーパークラス
HeaderField
メソッド
- comments
-
コメント(かっこにかこまれている部分)の配列を返します。
ヘッダが文字列化されるとき、コメントはまとめてヘッダの最後に追加されます。
つまり、一度 TMail でパーズしてしまったヘッダオブジェクトからは
完全に元と同じ文字列は生成できないということです。
(ぼくはコメントは所詮消えゆく運命なのでこのへんは仕方ないと思っています。)
UnknownHクラス
スーパークラス
StructH
対応ヘッダ
明示的に対応するクラスがあるヘッダ以外の全てのヘッダ
メソッド
- body, body=( str )
-
フィールドボディ。
DateHクラス
スーパークラス
StructH
対応するヘッダ
クラスメソッド
- DateH.t2s( time )
-
ローカル時間のTimeオブジェクトから、適正な RFC822(RFC1123)形式の文字列表現
DDD, MMM DD YYYY HH:MM:SS [+/-]ZZZZ を返します。
メソッド
- date, date=( tim )
-
Dateヘッダのdate-timeをTimeオブジェクトにしたもの。常にローカル時間です。
SaddrHクラス
スーパークラス
StructH
対応ヘッダ
- Return-Path:
- Sender:
- Resent-Sender:
メソッド
- addr, addr=( adr )
-
TMail::Address または TMail::AddressGroup を返します。
MaddrHクラス
スーパークラス
StructH
対応ヘッダ
- To:
- Cc:
- Bcc:
- From:
- Reply-To:
- Resent-To:
- Resent-Cc:
- Resent-Bcc:
- Resent-From:
- Resent-Reply-To:
メソッド
- addrs
-
Mbox または AddrGroupの配列です。
ユーザがそれ以外のオブジェクトを入れることもできますが
正常に動作することは期待しないでください。
MsgidHクラス
スーパークラス
StructH
対応ヘッダ
- Message-ID:
- Resent-Message-ID:
- Content-ID:
クラスメソッド
- MsgidH.msgid?( str )
-
str が message-id 形式の文字列を含むときにはその部分の文字列を、
そうでないときは nil を返します。
メソッド
- msgid, msgid=( str )
-
メッセージ ID 文字列。
RefHクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- refs
-
メッセージ ID と phrase のどちらかをランダムに含む配列。
- each_msgid{|msgid| .... }
-
メッセージ ID (に見える文字列)に対してだけ繰りかえします。
- each_phrase{|phrase| .... }
-
phrase に対してだけ繰りかえします。
RecvHクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- from, from=( domain )
-
from の文字列です。FQDN でなければいけません(チェックしない)。
- by, by=( domain )
-
by の文字列です。FQDN でなければいけません(チェックしない)。
- via, via=( atom )
-
via の文字列です(チェックしない)。
- with
-
with の文字列の配列です。
プロトコルを表す文字列でなければいけません(チェックしない)。
- msgid, msgid=( mid )
-
id の文字列です。普通、一単語です(チェックしない)。
- for_, for_=( dom )
-
for の文字列です。単純に for でないことに注意してください。
for_domain、ford という別名もあります。
- date, date=( dat )
-
ヘッダ中の ; のあとに示された時刻に対応するTimeオブジェクトです。
ローカル時間でないオブジェクトを代入するとローカル時間に変更されます。
RFC には省略してはならないと記載されていますが、ごく一部の心ない
エージェントは date も省略します。TMail はそのようなヘッダも
いちおうパースできますが、これは本当はよろしくない挙動です。
みなさんがもし Received: を生成するアプリケーションを作るときは
ちゃんと date をつけましょう。
EncHクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- encrypter, encrypter=( enc )
-
エンコードを行ったソフトウェアの名前。
- keyword, keyword=( key )
-
キーワード。省略されることがあります。
VersionHクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- version
-
"1.0" の形式の文字列。
- major, major=( maj )
-
メジャーバージョンを表す整数。
- minor, minor=( min )
-
マイナーバージョンを表す整数。
CTypeHクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- main, main=( t )
-
コンテントメインタイプ。'text' 'application' などの文字列。
- sub, sub=( t )
-
コンテントサブタイプ。'html' 'plain' 'gif' などの文字列。
- params
-
パラメータを Hash として格納したもの。
格納されている値のキーはすべて小文字の文字列です。
CEncodingHクラス
スーパークラス
StructH
対応ヘッダ
- Content-Transfer-Encoding:
メソッド
- encoding, encoding=( enc )
-
転送時のエンコード方式を表す文字列。
CDispositionクラス
スーパークラス
StructH
対応ヘッダ
メソッド
- disposition, disposition=( dis )
-
'attatched' などの文字列
- params
-
パラメータを Hash として格納したもの。
格納されている値のキーはすべて小文字の文字列です。
フィールド名とクラスの対応
フィールド名 | クラス |
Date | DateH |
Resent-Date | DateH |
Received | RecvH |
Return-Path | SaddrH |
Sender | SaddrH |
Resent-Sender | SaddrH |
To | MaddrH |
Cc | MaddrH |
Bcc | MaddrH |
From | MaddrH |
Reply-To | MaddrH |
Resent-To | MaddrH |
Resent-Cc | MaddrH |
Resent-Bcc | MaddrH |
Resent-From | MaddrH |
Resent-Reply-To | MaddrH |
Message-ID | MsgidH |
Resent-Message-ID | MsgidH |
In-Reply-To | RefH |
References | RefH |
Keywords | KeyH |
Encrypted | EncH |
Subject | StringH |
Comments | StringH |
X-* | StringH |
MIME-Version | VersionH |
Content-Type | CTypeH |
Content-Transfer-Encoding | CEncodingH |
Content-ID | MsgidH |
Content-Description | StringH |
Copyright (c) 1998-2000 Minero Aoki
<aamine@dp.u-netsurf.ne.jp>