ruby-gmailでRails3からサクッとgmail受信
ruby-gmailなんて便利なgemがあるんですね、全然知らなかった。
いままでnet/imapで頑張ってた時間よカムバック…orz
ruby-gmailを使ってRubyからGmailのメールを受信して本文を取得 – Shoken OpenSource Society
で知りました。参考になる情報ありがとうございます!
こちらの記事は生Rubyの話ですが、当然Railsでも使えます。
そして僕らにはBundlerがあるのでもっと楽できるのです。
というわけで試してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Rails3だよ $ rails -v Rails 3.2.6 # 適当にRailsプロジェクト作る $ rails new GmailReceiver $ cd GmailReceiver/ # インストール # 普通にいれると依存関係で実行時にエラーになるのでgitから入れる $ vim Gemfile gem 'ruby-gmail', :require => 'gmail', :git => 'git://github.com/dcparker/ruby-gmail.git' $ bundle |
上の記事を参考に以下の様なバッチスクリプトを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# Receive unread email from gmail # Thanks: http://shoken.hatenablog.com/entry/20120401/p1 logger = Rails.logger gmail = Gmail.new( 'user@example.com', 'pass' ) def get_body(mail) if !mail.text_part && !mail.html_part return "body: " + mail.body.decoded.encode("UTF-8", mail.charset) elsif mail.text_part return "text: " + mail.text_part.decoded elsif mail.html_part return "html: " + mail.html_part.decoded end end gmail.inbox.emails(:unread).map do |mail| logger.debug "Subject: #{mail.subject}" logger.debug "Date: #{mail.date}" logger.debug "From: #{mail.from}" logger.debug "To: #{mail.to}" logger.debug get_body(mail) end gmail.disconnect |
あとは、runnerで実行するだけです。
1 |
$ rails runner script/gmail_receiver.rb |
これだけで、log/development.logに
1 2 3 4 5 |
Subject: This is subject Date: 2012-07-21T16:10:01+09:00 From: ["from@example.com"] To: ["user@example.com"] body: This is body message. |
みたいな出力が並びます。
超お手軽ですね!
今度メール受信する要件があったら本格的に使ってみようと思います。
それでは。
最近のコメント