RailsのActionMailerを使いGmail経由でメール送信する

2013-04-24 00:00
rails

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: "[email protected]"

  # 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 => "[email protected]",
   :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メソッドを呼び出す必要があることに注意です。


« image_tagでソース指定でハマったRailsはどこでCSSを指定するのか? »