Heroku + Sendgrid
Heroku からメールを送信したかったので、アドオンである Sendgrid を使うことにした。無料の Sendgrid は 1 日 200通までという制限がある。メールの送信は Daily Cron の結果通知にしか使う予定がないので、特に制限は気にする必要がなかった。
add Sendgrid
% heroku addons:add sendgrid:free
mail gem を使う
Rails を使う場合の説明は公式のドキュメントに書いてあるけれど、Rails 以外のフレームワークを使う場合は具体的な説明はなかった。Pony がおすすめと書いてあった。
が、 mail を使うことにした。はじめは ActionMailer を使おうとしたけれど、ActionMailer をインストールしたら、依存関係で mail もインストールされたので、じゃあ mail にしようか、という流れ。
設定
メール送信のための設定。環境変数から ユーザ名やパスワードを取得。
Mail.defaults do delivery_method :smtp, { :address => 'smtp.sendgrid.net', :port => 25, :authentication => 'plain', :user_name => ENV['SENDGRID_USERNAME'], :password => ENV['SENDGRID_PASSWORD'], :domain => ENV['SENDGRID_DOMAIN'], } end
送信
cron の結果には日本語が含まれていれ、そのまま送信すると文字化けするので文字コードを変換して送信。文字コード変換のところはもっといいやり方があるかも。
宛先は環境変数に登録しておく。
message = report.encode('iso-2022-jp').force_encoding('binary') mail = Mail.new do from 'from@example.com' to ENV['REPORT_MAIL_TO'] subject subject body message end mail.charset = 'ISO-2022-JP' mail.deliver