- 更新日: 2016年11月8日
- Rails
RailsのActionMailerでメール送信
Rails アプリケーションで ActionMailer を使ってのメール送信テストを行いました。拍子抜けするくらい簡単に実装できて、またも Rails の凄さを実感しました!
— 環境 —
Rails 5.0.0.1
【追記 2016/11/08】
現時点での Rails 最新バージョンである Rails 5.0.0.1 で、ActionMailer によるメール送信が正常に動作することを確認しました。
一点だけ補足しますと、Rails 5 では独自の Mailer クラスは ApplicationMailer を継承します。ApplicationMailer が従来の ActionMailer::Base を継承しています。
【追記ここまで】
— 記事初回公開時の環境 —
Rails 4.0.1
ActionMailer を利用する設定
まずは、ActionMailer を利用する設定を行います。以下は、Gmail の smtp サーバーを利用してメールを送信する例です。
config/environments/development.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = true config.action_mailer.default_url_options = { :host => 'localhost:3000' } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => 'smtp.gmail.com', :port => 587, :domain => 'example.com', :user_name => 'メールアドレス', :password => 'パスワード', :authentication => :plain, :enable_starttls_auto => true } |
上記のように設定します。使用するメールアドレスとパスワードは、各々使用する Gmail アカウントのものに変更。
Mailer クラスを生成
UserMailer クラスと registration_confirmation アクションを作成します。
1 2 3 4 5 6 7 8 9 10 |
$ bundle exec rails generate mailer user_mailer registration_confirmation create app/mailers/user_mailer.rb invoke erb create app/views/user_mailer create app/views/user_mailer/registration_confirmation.text.erb invoke rspec create spec/mailers/user_mailer_spec.rb create spec/fixtures/user_mailer/registration_confirmation |
mailers 以下が controller に相当し、メール用テンプレートは普通の html ビューと同じ app/views 以下に生成されています。
UserMailer クラスを編集(Rails 5)
Rails 5 では、独自の Mailer クラスは ApplicationMailer(app/mailers/application_mailer.rb)を継承して作成します。この ApplicationMailer が従来の ActionMailer::Base を継承しています。なので、default from など共通の項目は ApplicationMailer クラスに実装すると便利です。
app/mailers/user_mailer.rb
1 2 3 4 5 6 7 8 9 10 11 12 |
class UserMailer < ApplicationMailer # Subject can be set in your I18n file at config/locales/en.yml # with the following lookup: # # en.user_mailer.registration_confirmation.subject # def registration_confirmation @greeting = "Hi" mail to: "to@example.org" end end |
UserMailer クラスを編集(Rails 4)
app/mailers/user_mailer.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class UserMailer < ActionMailer::Base default from: "from@example.com" # Subject can be set in your I18n file at config/locales/en.yml # with the following lookup: # # en.user_mailer.registration_confirmation.subject # def registration_confirmation @greeting = "Hi" mail to: "to@example.org" end end |
mail to(宛先)のメールアドレスを、とりあえず実験用のメアドに変更します。
メール用ビューを編集
UserMailer クラスの registration_confirmation アクションに対応する、メール用ビューを編集します。
app/views/user_mailer/registration_confirmation.text.erb
1 2 3 |
UserMailer#registration_confirmation <%= @greeting %>, find me in app/views/app/views/user_mailer/registration_confirmation.text.erb |
とりあえず、デフォルトのままで良いですかね。
コマンドラインで pry からメール送信の実験
1 2 3 4 5 6 7 |
$ bundle exec rails c pry(main)> UserMailer.registration_confirmation.deliver ... Net::SMTPAuthenticationError: 534-5.7.9 Application-specific password required. Learn more at from /Users/username/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/smtp.rb:962:in `check_auth_response' |
あれ?エラー。ググったところ、あれです Gmail の2段階認証でひっかかったようです。2段階認証を設定している場合、サードパーティ製アプリから Gmail アカウントにアクセス時は、アプリケーション固有パスワードを発行して設定してやる必要があります。
アプリケーション固有のパスワードを使用してログインする – Google アカウント ヘルプ
ということで、冒頭の設定 config.action_mailer.smtp_settings[:password] に、Gmail アカウントのアプリケーション固有パスワードを設定した後 pry を再起動。
1 2 3 4 5 |
pry(main)> quit $ bundle exec rails c pry(main)> UserMailer.registration_confirmation.deliver |
おっしゃー来たー!今度はメールが無事に届きました。Rails 何でも簡単に実装できるので、本当にすごいですね。後は実践用に Mailer のアクションやテンプレートを編集したり、I18n 対応などを行えば良い。
- – 参考リンク –
- ActionMailer Railsアプリからメールを送信 – 酒と泪とRubyとRailsと
- #206 Action Mailer in Rails 3 – RailsCasts
- ActionMailer::Base
- ActionMailer単体でメールを送信したいんです – なんでや。。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
- 初回公開日: 2014年6月4日
Leave Your Message!