RubyでIMAPを使ってGmailでメールを受信しましょう。

ローカル環境ではPOPで受信して問題なかったのですが、
CentOSにプログラムを乗せ替えると、なんだかparameterのエラーが出ました。


ググっても事例に乏しく、ActionMailerのバグである可能性も出てきましたので、試しにIMAPに変えてみたらうまくいきました。


注意点としては、fetchする際に配列でメッセージのidを渡してやると、改行コードを無視して取得されてしまうようだった(?)ので、
イテレーションで一つづつ内容を取得するようにするとうまくいきます。


おそらく、Gmailの一覧ページだと文面の改行を無視して表示しているのと同じことなのでしょう。

require 'net/imap'

imap = Net::IMAP.new(@config['server'],@config['port'],true)
imap.login(@config['username'], @config['password'])
imap.select('INBOX')
imap.search(["NOT", "DELETED"]).each do |message_id|
  MailFetcher.receive(imap.fetch(message_id, "RFC822")[0].attr["RFC822"])
  imap.store(message_id, "+FLAGS", [:Deleted])
end
imap.logout()
imap.disconnect() 


英語ですが、こちらが参考になります。
http://codeclimber.blogspot.com/2008/06/using-ruby-for-imap-with-gmail.html