GMailへのアクセス

GMailを非常に便利につかっているんだけど、定期的に送られてくるサーバーからの管理メールやらなんやらを自動的に受信してデータベースに格納するバッチを作りたいと一度ならず思ったんだけど、いまだにできない。

理由ははっきりしていて、POP経由でのアクセスの場合、Ruby1.8系ではSSLが使えないのでRuby1.9ならなんとか、という事になってる。Ruby1.9は実験では使っているけど、日々のバッチで使うにはまだ安定性が足らないかなあ、と思って敬遠中。

この週末にもう1回トライしてみようとおもって調べてみたら、IMAP経由でアクセスできることを発見!。そういえば、RubyIMAPの接続はした事がなかったので、そちらの勉強もかねてトライ。

とりあえずベタベタな処理でつながるかどうか試してみたのが以下のサンプル

require "net/imap"
require "kconv"

#GmailのIMAPはポート番号993でSSLでないとつながらないので第3引数はtrue
imap = Net::IMAP.new("imap.gmail.com",993,true)
#ログイン - "@gmail.com"部分は除けてIDとして入力すること
imap.login(ID,PASS)

#受信ボックスを読み込むので受信ボックスに移動
#selectは読み込み専用。操作したいならexamine
imap.select("INBOX")

#未読メール一覧を取得する 
mails = imap.search("UNSEEN")

#本文(日本語はjisで入っていたのでUTF8に変換)
data = imap.fetch(mails[0],"BODY[TEXT]")
puts data[0].attr["BODY[TEXT]"].toutf8

#その他データ
env = imap.fetch(mails[0],"ENVELOPE")[0].attr["ENVELOPE"]

#タイトル
env.subject.toutf8
#fromメールアドレス
env.from[0].mailbox + "@" + env.from[0].host
#toメールアドレス
env.to[0].mailbox + "@" + env.to[0].host
#送信日付
env.date

このぐらいで何となくデータがとれる事がわかった。もう少し調べてみないといけないけど、とりあえず作れそうな雰囲気にはなってきたかな(^o^)