Railsとメール送信あれやこれや
Deviseを使ってUser登録機能を作ったりしていると、メールの送信が必要になってくるのでメモっておこうと思います。
開発環境
まずは、開発用。Railscasts の @ryanb が作ってるletter_opener が大変便利。
Gemfileに以下を設定。
group :development do
gem 'letter_opener'
end
config/environments/development.rb
に以下を設定。
config.action_mailer.delivery_method = :letter_opener
これで、メール送信処理が行われると、ブラウザが開いてメールが確認できます。
本番環境
sendmail
本番環境でsendmailが動いているようなら、config/environments/production.rb
に以下を追加して、ローカルからメールを送信するのが楽。
config.action_mailer.delivery_method = :sendmail
smtp
PaaSなんかだとそういう環境はないかもしれないので、Gmail(smtp)を使った設定もあるので以下のように設定。
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'example.com',
:user_name => 'username',
:password => 'password',
:authentication => 'plain',
:enable_starttls_auto => true
}
‘username’や’password’の方は埋め込むとセキュリティ上良くない場合なんかは 環境変数で設定するといいだろう。
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'example.com',
:user_name => ENV['SMTP_USERNAME'],
:password => ENV['SMTP_PASSWORD'],
:authentication => 'plain',
:enable_starttls_auto => true
}
Gmailの送信は確か、500通/日で、Fromの部分は登録されているアドレスでないといけないので、そこらへんは使用するGmailを設定して下さい。
Sendgrid
Herokuを使っている場合は、Sendgridを使ってメールを送信するのが楽ちん 200通/日まで無料なので、自分の場合はステージング環境などには十分でした。
herokuでAddonを有効にするにはクレジットカードを登録する必要があります。
その後コマンドラインから
$ heroku addons:add sendgrid:starter
として有効にします。
config/initializers/mail.rb
に以下のように記述します。
ActionMailer::Base.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com'
}
ActionMailer::Base.delivery_method ||= :smtp
以上でメールが送信できるようになります。