HeaderFieldとその下位クラス

ヘッダフィールドを表現するクラスです。 ヘッダの種類によって対応するクラスが違い、 例えば To: ヘッダはTMail::MaddrH クラスで表されます。
すべてのクラスは TMail モジュールの中に定義されています。

全てのヘッダは特性に実際のアクセスがあるまではヘッダの内容の解析をせず、 最初のアクセスでパースを行います。これによって実行速度(とメモリ)をかなり 節約できているのですが、反面、パーズエラーがどこでおきるかわからない 危険性も含んでいます。
0.7.6 からは TMail::Mail.new の引数によってこのときの パースエラーを無視するようになりました。何もしないとパースエラーは 全て無視されるので、厳しい検査が必要なときは TMail::Mail.new( port, true ) のようにして生成してください。

0.8.5 からは、無限ループの可能性があるところだけはスレッドに対応しました。 ただし、ライブラリでは内容の保証まではしない(予定な)ので、 複数スレッドが同じ TMail に書きこみアクセスする可能性があるときは、 明示的にアプリケーション側でロックをかけてください。


HeaderFieldクラス

スーパークラス

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

対応ヘッダ

メソッド

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

対応ヘッダ

メソッド

addr, addr=( adr )
TMail::Address または TMail::AddressGroup を返します。

MaddrHクラス

スーパークラス

StructH

対応ヘッダ

メソッド

addrs
Mbox または AddrGroupの配列です。 ユーザがそれ以外のオブジェクトを入れることもできますが 正常に動作することは期待しないでください。

MsgidHクラス

スーパークラス

StructH

対応ヘッダ

クラスメソッド

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

対応ヘッダ

メソッド

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>