読者です 読者をやめる 読者になる 読者になる

ばくのエンジニア日誌

技術的なメモなどを書いていきます。

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

rails
このブログ(ばくのエンジニア日誌)は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メソッドを呼び出す必要があることに注意です。