RailsのActionMailerを使いGmail経由でメール送信する
このブログ(ばくのエンジニア日誌)はBAKUNOTEに移転しました。
Railsのバージョンは3.2。
以前はtls用のライブラリを自前で用意しなきゃいけなかったり大変だったみたいですが、現在はとても簡単になっています。
1.設定
まずは設定ファイルを編集します。
config/environments/development.rb config.action_mailer.delivery_method = :smtp config.action_mailer.raise_delivery_errors = true config.action_mailer.smtp_settings = { :address => 'smtp.gmail.com', :port => 587, :authentication => :login, :user_name => 'username', # ユーザー名 :password => 'password' # パスワード }
2.Mailerを生成
railsコマンドで生成できます。
rails generate TestMailer sendmail
3.Mailerを編集
2で生成したMailerを編集します。
app/mailer/test_mailer.rb # coding: utf-8 class TestMailer < ActionMailer::Base default from: "xxxxxx@gmail.com" # Subject can be set in your I18n file at config/locales/en.yml # with the following lookup: # # en.test_mailer.sendmail.subject # def sendmail @greeting = "Hi" mail(:to => "xxxxxx@gmail.com", :subject => 'テスト送信') end end
通常のコントローラーと同じように、テンプレート変数などをセット可能。
4.メール本文を編集
ビュー編集(erb)と同じです。2で自動的にerbファイルも生成されるはず。 htmlにしたければ、拡張子を変更。
app/views/test_mailer/sendmail.text.erb 中身は自由に。
5.Mailerを呼び出すControllerを定義
MailerをどこかのControllerで呼び出してあげる必要があります。
app/controllers/hoge_controller.rb def mail_send @mail = TestMailer.sendmail.deliver render :text => 'メール送信完了' end
sendmailメソッドはMail::Messageオブジェクトを返すだけなので、deliverメソッドを呼び出す必要があることに注意です。