TMail user manual


ライブラリの概略

TMailはメールを簡単に扱うためのクラスライブラリです。
ヘッダはひとつひとつがオブジェクトとして表現され、ヘッダを「文字列」としてでなく (めんどくさん文法に一切関ることなく)「オブジェクト」とそのプロパティとして読み書きを することができます。

また、MIMEマルチパートにも対応しています。
読みこみ時はヘッダに従って本文を分割し、書きこみ時には適当にバウンダリを設定して 再構成します。

一方で、TMailはメール本文の内容には一切関与しません。文字コードも勝手には変換 しませんし、行末コードも変えません。Base64のデコードもしません。それはライブラリの 利用者側で content-* ヘッダあたりを見て判断する必要があります。

ありがちな使いかた

メールボックスを調べてなにかしたいとしましょう。 例として、/var/spool/mail/aamine がメールボックスのファイルだとすると、 このメールボックスのメールには、次のようにアクセスできます。


require 'tmail'
require 'loader'

MboxLoader.new( '/var/spool/mail/aamine' ).each do |port|
  tmail = TMail.new( port )
end

port はメール一通に対応しているファイル名のようなもので、それを引数にTMail オブジェクトを生成します。

では、だれからメールが来ているのか表示させてみます。 次のコードが上の例の each の中にあると思ってください。


puts tmail.from_phrase

これで、From: の"phrase"部分(friendly from などと呼ばれることもあります)が ずらっと表示されます。

この程度なら grep のほうが簡単ですが、TMailのいいところは、どんなに 複雑になっても対応できることです。たとえば、他のヘッダも見て本文をデコードするとか、 From: だけじゃなく Sender: も確かめるとか。ちなみに、ヘッダの日本語も自動的に デコードされます。

TMailのオブジェクト構成

簡単に、TMailライブラリを構成するクラス間の関係について書きます。

中心はTMailクラスです。ひとつのメールがひとつのTMailとして表現され、 (たぶんたくさんの)ヘッダフィールドと本文を含んでいます。

「ヘッダフィールド」とはようするに To: や From: のことです。ひとつの ヘッダフィールドがひとつのHeaderFieldオブジェクトになります。
ヘッダフィールドオブジェクトはTMailの中に 'to' => Toヘッダフィールド のような連想配列として格納されていて、TMail#[] や TMail#fetch でとりだせます。

ヘッダはいろいろな種類があるので、それに対応するクラスもいろいろ用意されています。 たとえばTo:ヘッダはMaddrHクラスで表現され、Subject:はStringHクラスで表現されます。 to_s body inspect のように共通するメソッドもありますが、そのクラスに独自のメソッドも たくさんあります。
Toヘッダならaddrsというメソッドがあります。これはそのヘッダで記載されている アドレスの配列を返すメソッドで、 tmail['to'].addrs.each do |adr| ... end の ようにすればToのアドレス全てに対するくりかえしが行なえるわけです。

また、前節の例でも使いましたが、よく参照されるヘッダに関しては、簡易アクセス用の メソッドが定義されています。たとえば、from や from_phrase、to、subject などです。

本文は文字列としてbodyメソッドで参照できます。MIMEマルチパートボディは、ひとつの パートがひとつのTMailである配列になっていて、tmail.partsで参照できます。


Copyright(c) 1998-1999 Minero Aoki.