RailsでGmailにメールを送る

RailsGmailを使ってメール送付を行う方法についてのメモ。

最初に、config/environments/development.rbの編集

 16   # Don't care if the mailer can't send.
 17   config.action_mailer.raise_delivery_errors = true
 18   config.action_mailer.delivery_method = :smtp
 19   config.action_mailer.smtp_settings = {
 20     :enable_starttls_auto => true,
 21     :address => 'smtp.gmail.com',
 22     :port => '587',
 23     :domain => 'smtp.gmail.com',
 24     :authentication => 'plain',
 25     :user_name => ENV['DEV_MAIL_USER'],
 26     :password => ENV['DEV_MAIL_PASSWD']
 27   }

続いて


$ rails g mailer InviteGroupMailer send_invite_mail

次に生成されたメールクラスの編集

1 class InviteGroupMailer < ActionMailer::Base
  2   default from: "testMail@example.com"
  3
  4   # Subject can be set in your I18n file at config/locales/en.yml
  5   # with the following lookup:
  6   #
  7   #   en.invite_group_mailer.send_invite_mail.subject
  8   #
  9   def send_invite_mail
 10     @greeting = "Hi"
 11     
 12
 13     mail to: "test@gmail.com" ,subject: "test mail"
 14   end
 15 end

メールテンプレートの編集。拡張子が.html.erbだとHTMLメール。.text.erbだとテキストメール。
今回はテキストメールで「 app/views/invite_group_mailer/send_invite_mail.text.erb」を編集

  1 InviteGroupMailer#send_invite_mail
  2
  3 <%= @greeting %>

デフォルトのままにして取りあえず送付されるかを確認する。


$ rails c
irb(main):001:0> InviteGroupMailer.send_invite_mail.deliver
Rendered invite_group_mailer/send_invite_mail.text.erb (1.1ms)

Sent mail to *****@******* (3594.6ms)
Date: Wed, 27 Nov 2013 16:47:59 +0900
From: testMail@example.com
To: test@gmail.com
Message-ID: <5295a3af68707_3d493ff24d8606d0195f9@*************l>
Subject: test mail
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit

InviteGroupMailer#send_invite_mail

Hi
・・・・・・・・・・
・・・・・・・・・・

TOで指定したアドレスにメールが送られていれば、問題なし!

追記 2013/11/28
toを引数で渡す場合

  9   def send_invite_mail(to_mail)
 10     @greeting = "Hi"
 11     @group_join_url = "http://hogehoge.com/"
 12
 13     mail to: to_mail ,subject: "Invite life_photo group."
 14   end
InviteGroupMailer.send_invite_mail('hogehoge@gmail.com').deliver