MailParser

メールメッセージを処理するための Module です。

必要なもの

ライセンス

このプログラムは Ruby ライセンスに従います。

機能

使用例

require "mailparser"
File.open("/tmp/hoge.eml") do |f|
  m = MailParser.parse_message f
  m[:from]                 # Fromへッダのメールアドレスの配列
  m[:to]                   # Toへッダのメールアドレスの配列
  m[:subject]              # Subjectへッダの内容
  m[:body]                 # メール本文
  m[:parts]                # 添付ファイルに対応する Hash の配列
  m[:parts][0][:filename]  # 一番目の添付ファイルのファイル名
  m[:parts][0][:body]      # 一番目の添付ファイルの内容
end

モジュールメソッド

parse_message(io)
IOオブジェクト(またはそれに似たもの)からメッセージを読み込み、解析した結果を次の Hash オブジェクトで返します。
キー
:fromFromへッダのメールアドレスの配列
:toToへッダのメールアドレスの配列
:ccCcへッダのメールアドレスの配列
:dateDateへッダを解析した結果のTimeオブジェクト(Dateへッダがない場合やパースできない場合は nil)
:subjectSubjectへッダの文字列(デコード済)
:typeContent-Typeへッダのメインタイプ
:subtypeContent-Typeへッダのサブタイプ
:charsetContent-Typeへッダのcharsetパラメータの値(小文字)
:encodingContent-Transfer-Encodingへッダの値(小文字)
:multipartメインタイプが multipart の場合 true
:boundaryパート毎の区切り文字列(マルチパート時)
:filenameファイル名
:header"へッダ名(小文字)"=>"へッダ値(デコード済)"のハッシュ
:rawheader生のへッダ部
:bodyメール本文(デコード済)
:parts各パートの配列(マルチパート時)。各パートはこれと同じ形式の Hash オブジェクト
:messageメインタイプが message の場合、本文部を解析した結果の Hash オブジェクト
output_charset = str
出力の文字コードを指定します。 指定できる値は nil または "euc-jp" または "utf-8" です。 デフォルトは "euc-jp" です。 nil を指定した時はコード変換を行ないません。
text_body_only = flag
true の場合、:type == "text" 時だけ :body を生成します。 デフォルトは false です。
extract_message_type = flag
false の場合、Content-Type が message/* の時に、それ以上展開しません。 デフォルトは true です。

これ以降は parse_message が内部で使用しているメソッドですが、個々に使用することもできます。

b64_decode(str)
Base64 エンコードされた文字列をデコードします。
MailParser.b64_decode("aG9nZWhvZ2U=")
  # => "hogehoge"
b64_hdecode(str)
Base64 エンコードされたへッダ文字列をデコードします。 b64_decode と同じです。
MailParser.b64_hdecode("aG9nZWhvZ2U=")
  # => "hogehoge"
qp_decode(str)
Quoted-Printable エンコードされた文字列をデコードします。
 MailParser.qp_decode("=A4=DB=A4=B2_=A4=CF=A4=B2")'
  # => "ほげ_はげ"
qp_hdecode(str)
Quoted-Printable エンコードされたへッダ文字列をデコードします。 「_」を空白にすること以外は qp_decode と同じです。
MailParser.qp_hdecode("=A4=DB=A4=B2_=A4=CF=A4=B2")'
  # => "ほげ はげ"
mdecode_token(str)
「=?chaset?encode?xxxxxx?=」の文字列をデコードします。結果の文字コードは EUC-JP です。
MailParser.mdecode_token("=?iso-2022-jp?b?GyRCJFUkLCRVJCwbKEI=?=")
  # => "ふがふが"
mime_header_decode(str)
へッダ文字列をデコードします。結果の文字コードは EUC-JP です。
MailParser.mime_header_decode("foo =?iso-2022-jp?b?GyRCJFUkLCRVJCwbKEI=?= bar")
  # => "foo ふがふが bar"
trunc_comment(str)
コメント部を取り除いた文字列を返します。
MailParser.trunc_comment("aaa (bbb (ccc)) ddd")
  # => "aaa  ddd"
split_address(str)
へッダ文字列を「,」で分割した配列を返します。
MailParser.split_address('aaa@example.jp, hoge <bbb@example.jp>, "fuga,hage" <ccc@example.com>')
  # => ["aaa@example.jp", "hoge <bbb@example.jp>", "\"fuga,hage\" <ccc@example.com>"]
get_mail_address(str)
メールアドレスの配列を返します。
MailParser.get_mail_address('aaa@example.jp, hoge <bbb@example.jp>, "fuga,hage" <ccc@example.com>')
  # => ["aaa@example.jp", "bbb@example.jp", "ccc@example.com"]
parse_content_type(str)
Content-Type へッダ文字列を解析し、次の Hash オブジェクトを返します。 メインタイプ,サブタイプ,パラメータ名は小文字に変換されます。
キー
:typeメインタイプ
:subtypeサブタイプ
:parameterパラメータ名と値の Hash
MailParser.parse_content_type("Text/Plain; CharSet=euc-jp")
  # => {:type=>"text", :subtype=>"plain", :parameter=>{"charset"=>"euc-jp"}}
parse_content_disposition(str)
parse_content_type と同じ。

履歴

0.3.5 2005-06-08
0.3.4 2005-05-02
0.3.3 2005-03-31
0.3.2 2005-03-01
0.3.1 2005-02-21
0.3 2005-01-28
0.2.1 2005-01-28
0.2 2005-01-06
0.1 2004/11/02

とみたまさひろ

Last modified: Wed Jun 8 18:56:45 JST 2005