2012年11月29日木曜日

[Ruby]Rails3.2のAction Mailer単体でメールを送信する

Rails3.2のAction Mailer単体でメールを送信しようとしたが、
bodyメソッドが廃止されており、本文の指定方法が良く分からなかった。

いろいろ調べたところ、以下のサイトに書いてあった。
http://guides.rubyonrails.org/action_mailer_basics.html

renderメソッドを使って、
  render :text => '本文'
とするようだ。

以下、サンプルコードを示す。

require 'action_mailer'

# SMTPサーバ利用時のオプション
ActionMailer::Base.smtp_settings = {
        :address=>'localhost',
        :port=>'25',
        :domain=>'domain'
        :user_name=>'user_name',
        :password=>'password',
        :authentication=>:plain
}

ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.delivery_method = :smtp

class HelloMailer < ActionMailer::Base
  default :from => 'hogehoge@sample.com'

  def createMessage(to, subject, body)
    mail(:to => to,
         :subject => subject) do |format|
      format.text { render :text => body }
    end
  end
end

HelloMailer.createMessage('fugafuga@sample.com', 'hello', 'こんにちは、世界!').deliver

※メールサーバ指定部分のコードは http://d.hatena.ne.jp/tackun/20101028/1288282803 を参考にした。

このコードでgmailへ送信してみたら、正しく受信できた。
ただし、送信内容がRFCに従っているかは不明。