ruby でメールを送信する
ruby からgmail を送信するには、 mail ライブラリだけでも出来るんだけど。
MIMEエンコードされたデータを受け取ってそのまま forward するには、もう少しいい方法がないかなと思って考えていた。
メールリレーの中間に入って、指定メールだけを転送したいとか、smtp-proxy を作っておきたいとかそういうときに活用できる。いちいちデコードして作り直しててめんどくさくてですね。
net/smtp で gmail 送信。
require 'bundler' Bundler.setup require 'net/smtp' require 'mail' require_relative '../etc/gmail-passwd' smtp = Net::SMTP.new("smtp.gmail.com", '587') smtp.enable_starttls smtp.start( 'smtp.gmail.com', $gmail_account.username, $gmail_account.password, :login ) mail = Mail.new mail.from = "webmaster@example.com" mail.to = "takuya@example.com" mail.subject = "test" mail.body ="test test" mail.attachments["photo.jpg"] = File.binread( File.expand_path( "./photo.jpg", File.dirname($0) ) ) smtp.send_mail( mail.encoded , mail.from, mail.to )
これで、ファイルを入れているプロジェクトで bundle install したら大丈夫。
添付ファイルの準備。
送信テストで添付ファイルを使いたいので準備します。
convert -background white -fill black -pointsize 256 label:'Hello World' photo.jpg
送信テスト。
bundler init bundler add mail bundler install ruby test-mail.rb
これで送信できます。
Mailのみの場合
mail ライブラリで新規メール作成して、送信するにはMail だけでいける。
require 'mail' mail = Mail.new mail.delivery_method(:smtp, address: "smtp.gmail.com", port: 587, domain: "smtp.gmail.com", authentication: :login, user_name: $gmail_account.username, password: $gmail_account.password ) mail.from = "webmaster@example.com" mail.to = "takuya@example.com" mail.subject = "test" mail.body ="test test" mail.deliver