ruby-gmailを使ってRubyからGmailのメールを受信して本文を取得
Rubyのメール操作ライブラリにはmikel/mailがありますが、それをGmailで使いやすいように薄くラップしたruby-gmailというものがあります。今回はこれを使ってRubyからGmailからメール本文を取得します。
LoadError: cannot load such file -- mime/message
うーん、早速トラブル。
[root@xxx xxx]# irb irb(main):001:0> require 'gmail' LoadError: cannot load such file -- mime/message from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/ruby-gmail-0.2.1/lib/gmail/message.rb:1:in `<top (required)>' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/ruby-gmail-0.2.1/lib/gmail.rb:168:in `<top (required)>' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' from (irb):1 from /usr/local/bin/irb:12:in `<main>'
おー、requireでいきなり。。mime/messageが見つからない模様。
Githubのソースとコミット履歴を見てみると、message.rbから「require 'mime/message'」が削除されてる。
`gem_original_require': no such file to load -- mime/message (LoadError) · 530da69 · dcparker/ruby-gmail · GitHub
lib/gmail/message.rb View file @ 530da69 @@ -1,4 +1,3 @@ -require 'mime/message' class Gmail class Message def initialize(gmail, mailbox, uid)
うーん、いらないんかい。
消してみると、requireできるけど、また違うエラー。そんなに最近のコミットではないし、なんでgemに反映されないのかと思いGithubのコメント見てみると、
Pull Request #29: no such file to load -- mime/message by adimircolen · dcparker/ruby-gmail · GitHub
I am sorry, the original gem writer is deceased...
d,deceased...
とりあえず、ソースをGithubから落とした最新に差し替え。ruby-gmailに入っているRubyのソースは4ファイルしかないので簡単。ruby-gmailは私の環境ではここにありました。
/usr/local/lib/ruby/gems/1.9.1/gems/ruby-gmail-0.2.1/lib
ん?gems/1.9.1?rubyは1.9.3なのに。。
気になって調べたら、1.9.1で大丈夫のよう。
インターフェースが1.9.1から変わってないとのこと。
API Only - Stack Exchange
メールの本文取得
ドキュメント読みながらやると簡単にできた。
dcparker/ruby-gmail · GitHub
#coding: utf-8 require 'gmail' USERNAME='' #gmailのアドレス PASSWORD='' #gmailのパスワード gmail = Gmail.new(USERNAME,PASSWORD) mails = gmail.inbox.emails(:all).map do |mail| #emailsの引数には:all,:read,:unreadがある #件名、日付、From、To puts "Subject: #{mail.subject}" puts "Date: #{mail.date}" puts "From: #{mail.from}" puts "To: #{mail.to}" #本文処理 if !mail.text_part && !mail.html_part puts "body: " + mail.body.decoded.encode("UTF-8", mail.charset) elsif mail.text_part puts "text: " + mail.text_part.decoded elsif mail.html_part puts "html: " + mail.html_part.decoded end end gmail.disconnect
できた!
[root@xxx xxx]# ruby gmail-test.rb Subject: テストメールタイトル Date: 2012-03-31T19:34:44+09:00 From: ["xxxx@gmail.com"] To: ["xxxx@gmail.com"] body: 取得できる?!
他にも
・ラベルの変更
・未読既読の変更
・メールの削除
ができるみたい。
次回は添付ファイルの扱いに関して書きます。
2012/04/10追記
書きました。
ruby-gmailを使ってRubyからGmailの添付ファイルを取得 - オープンソースよしみ視点
参考にさせていただきました。
403 Forbidden