hack のためのネタ帳, etc,,,

net/imap は Ruby に標準添付のライブラリであり、IMAP の操作を容易に行うことが出来る。

以下、Tips.

IMAP フォルダー

マルチバイトの IMAP フォルダー名は modified UTF-7 でエンコードされる。
これは Net::IMAP.encode_utf7, Net::IMAP.decode_utf7 関数を用いて encode/decode 出来る。
入出力は UTF-8 である。
なぜか Ruby 公式のリファレンスマニュアルでは言及されていないので、ソースを直接見ると良い。
例えば 1.8 なら /usr/lib/ruby/1.8/net/imap.rb 辺りにある。

UTF-8 とローカルの文字コードの間で変換が必要であれば Kconv を用いると良い。

MIME エンコード

メールヘッダ中のエンベロープ(SUBJECT や FROM 等)にマルチバイトを含む場合、通常は MIME エンコードされている。
これは NKF.nkf を用いると良い。
NKF.nkf("-M", str), NKF.nkf("-m", str) とすることで encode/decode 出来る。

Multipart の取り出し

rubymail を使うと良い。
net/imap で RFC822 を fetch して RMail::Parser.read メソッドに食わせてやると良い。
ただし、うちの環境では RMail::Parser.read が CRLF を上手く解さなかった。
その場合 .attr["RFC822"].gsub(/\r\n/, "\n") のように LF に直して食わせてやると良い。

list メソッドのワイルドカード

% は階層区切りにマッチせず、* は階層区切りにもマッチする。
See: RFC2060 6.3.8. LIST Command, RFC2060 6.3.8. LIST 命令
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます