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が発生し、エラー終了した。 原因は不明。しかし、再度実行で問題なく処理できる範囲だったので、特に対処はしなかった。
ネットワークが切れたりした?