RailsのActionMailerを使いGmail経由でメール送信する
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メソッドを呼び出す必要があることに注意です。