2013-08-21 :-(
_ 午後
1300 自習
_ [ruby][gmail][ruby-gmail]ruby-gmail でメール送信する
基本的には Example Code: のそのままなのだけど、1 つだけ注意。
% ruby send5.rb /usr/lib/ruby/1.9.1/net/imap.rb:1141:in `get_tagged_response': Application-specific password required: http://support.google.com/accounts/bin/answer.py?answer=185833 (Failure) (Net::IMAP::NoResponseError) from /usr/lib/ruby/1.9.1/net/imap.rb:1195:in `block in send_command' from /usr/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' from /usr/lib/ruby/1.9.1/net/imap.rb:1177:in `send_command' from /usr/lib/ruby/1.9.1/net/imap.rb:419:in `login' from /usr/lib/ruby/gems/1.9.1/gems/ruby-gmail-0.3.0/lib/gmail.rb:95:in `login' from /usr/lib/ruby/gems/1.9.1/gems/ruby-gmail-0.3.0/lib/gmail.rb:23:in `initialize' from send5.rb:6:in `new' from send5.rb:6:in `<main>'
メッセージにあるように、アプリケーション固有のパスワードを設定する必要がある。
アプリケーション固有のパスワードを使用してログインする - Google アカウント ヘルプ
手順どおりに作業し、パスワードを取得する。
from も要るらしいので追加。
結局こうなった。
# coding: utf-8 require 'gmail' Gmail.new('ユーザー名', 'アプリケーション固有のパスワード') do |gmail| email = gmail.generate_message do from "miwarin@gmail.com" to "miwarin@example.gr.jp" subject "test1" body "test1" end email.deliver! end
実行すると SMTP の実況ログが印字される。
% ruby send5.rb -> "220 mx.google.com ESMTP xxxxxxxxxxxxxxx - gsmtp\r\n" <- "EHLO miwarin\r\n" -> "250-mx.google.com at your service, [xxx.xxx.xxx.xxx]\r\n" -> "250-SIZE 35882577\r\n" -> "250-8BITMIME\r\n" -> "250-STARTTLS\r\n" -> "250 ENHANCEDSTATUSCODES\r\n" <- "STARTTLS\r\n" -> "220 2.0.0 Ready to start TLS\r\n" <- "EHLO miwarin\r\n" -> "250-mx.google.com at your service, [xxx.xxx.xxx.xxx]\r\n" -> "250-SIZE 35882577\r\n" -> "250-8BITMIME\r\n" -> "250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN\r\n" -> "250 ENHANCEDSTATUSCODES\r\n" <- "AUTH PLAIN xxxxxxxxxxxxxxxxxxxxx\r\n" -> "235 2.7.0 Accepted\r\n" <- "MAIL FROM:<miwarin@gmail.com>\r\n" -> "250 2.1.0 OK xxxxxxxxxxxxxxxxxxxxx - gsmtp\r\n" <- "RCPT TO:<miwarin@example.gr.jp>\r\n" -> "250 2.1.5 OK xxxxxxxxxxxxxxxxxxxxx - gsmtp\r\n" <- "DATA\r\n" -> "354 Go ahead xxxxxxxxxxxxxxxxxxxxx - gsmtp\r\n" writing message from String wrote 269 bytes -> "250 2.0.0 OK 1377045178 xxxxxxxxxxxxxxxxxxxxx - gsmtp\r\n" <- "QUIT\r\n" -> "221 2.0.0 closing connection xxxxxxxxxxxxxxxxxxxxx - gsmtp\r\n"
日本語
charset=iso-2022-jp 且つ Content-Transfer-Encoding: 7bit に設定したいのだが、ruby-gmail でどうすりゃいいのか分からない( ruby-gmail/lib/gmail.rb から mail/lib/mail/message.rb が呼ばれる )
これだとエラーになる。
email = gmail.generate_message do : subject "ほげ" body "ほげほげ" charset = 'iso-2022-jp' add_content_transfer_encoding; end
mikel/mail の場合はこうすればいいのだがー
mail = Mail.new mail.from = 'miwarin@gmail.com' mail.to = 'miwarin@example.gr.jp' mail.subject = '日本語タイトル' mail.charset ='iso-2022-jp' mail.add_content_transfer_encoding mail.body = '日本語本文' mail.deliver