作業ノート

様々なまとめ、雑感など

rubyで未読メールを取得して処理する(IMAP)

連休中に届いた大量のエラーメールを処理するため、rubyを使って未読メールの取得と 必要な処理をおこない、既読にした。IMAP経由。

そのとき作ったプログラムの一部。

気になったところ

select()とexamine()の違い

どちらもメールボックスの指定をするための関数。ただ、examine()は、対象のメールボックスをread-onlyで取得する。

select()で指定してfetch()を実行すると、取得したメールが自動的に既読の状態になる(UNSEENフラグが自動的に付与される)ことを確認した。

一方examine()では、そのようなことにはならなかった。

今回、プログラムで既読にするかを判定したかったので、メールボックスの指定はexamine()を使用した。

imap.fetch()で取得するメール数

テストで一度、search()で取得した最初のmessage idを使ってfetch()を実行したところメッセージを2件取得。 1件は意図したもの。1件はヘッダや本文がなく空(?)のもの。

取得したいメールは、常に最初にあるようだったので、Array.first()で最初のメールのみを取得するようにした。

fetch()与えたmessage idは、仕様ではsequence numberとあるのでその値は一意だと思っていたのだが、違うのだろうか。

時々、EOFErrorが発生する

store()で、ときどきEOFErrorが発生し、エラー終了した。 原因は不明。しかし、再度実行で問題なく処理できる範囲だったので、特に対処はしなかった。

ネットワークが切れたりした?

参考