Skip to content
iwhurtafly edited this page Jun 3, 2012 · 4 revisions

Herokuでは、メールサービスを提供していませんが、外部のSMTPサーバーを使用することを許可しています。 適切なemailサービスを Heroku Add-onsのカタログから 探し出してみて下さい。とても軽量に、設定を変更せず1日に何千通ものemailを扱うことが出来ます。

RailsからEmailを送るには

ここでは、外部のSMTPプロバイダーを利用したemail送信のRailsアプリをセットアップする クイックガイドを提供してみます。

1. deliveryメソッドの設定

config/environment.rb内にあるActionMailerのdeliveryメソッドをSMTPに設定

:::ruby
config.action_mailer.delivery_method = :smtp

2. SMTP接続の調整

:::ruby
ActionMailer::Base.smtp_settings = {
  :address  => "smtp.someserver.net",
  :port  => 25,
  :user_name  => "someone@someserver.net",
  :password  => "mypass",
  :authentication  => :login
}

Railsがメール配信時にエラーを返すように設定したいのであれば、下記パラメータをtrueにします。

:::ruby
config.action_mailer.raise_delivery_errors = true

GmailをSMTPサーバーとして使いたいのであれば、もう少し余分な設定が必要となります。 概要はこちらのブログを参照して下さい。

3. Mailerクラスのビルド

Mailerクラスを作成することから始めます:

:::term
$ ./script/generate mailer <name>

<name>はクラス名(例えば、Notifier等)です。RailsのMailerは、それぞれのアクションに一つのメソッドを持ち、 views/<class_name>配下にテンプレートが作成されるコントローラーの動きに似ているところがあります。 Mailerでは、それぞれのメソッドが、emailメッセージの定義となります。(誰が受信者で、どんな件名で等) emailのボディは、ビューに格納されます。

例:

:::ruby
class UserMailer < ActionMailer::Base
  def signup_notification(user)
    recipients "#{user.name} <#{user.email}>"
    from       "My Forum "
    subject    "Please activate your new account"
    sent_on    Time.now
    body       { :user => user, :url => activate_url(user.activation_code, :host => user.site.host }
  end
end

app/views/user_mailer/signup_notification.rhtml配下のビューは、このような感じになります。:

:::html
Your account has been created.

Username: 
Password: 
Visit this url to activate your account:
もし、Rails 3.0以降を使用しているのであれば、"deliver_"のプレフィクス無しで、mailerメソッドを直接呼び出すことが出来ます。

さあ、emailを送信する準備が整いました。正常に動作するかを確認するため、コンソールから手動で送信してみましょう:

:::term
$ heroku console
>>> user = User.new(:name => 'Me', :email => 'me@gmail.com', :login => 'me', :password => '1234')
>>> UserMailer.deliver_signup_notification(user)

emailが送信されたことを確認するため、heroku logsの結果をチェックして下さい。

一度、動作検証がなされると、モデルへ追記したくなることでしょう。:

:::ruby
after_create :deliver_signup_notification

def deliver_signup_notification
  UserMailer.deliver_signup_notification(self)
end

GmailでEmailの送信

制限された環境で良ければ、Gmailが選択肢となるでしょう。1日に500メッセージまで送信可能となります。 差出人のアドレスは、常にアカウントのemailアドレスとなります。 こちらのブログにて Gmail経由でのemail送信に関する必要なステップが記載されています。ブログに記載された内容に従って下さい。 終わりましたら、Gmailを使うためにRailsを設定して行きます。上記#1のステップから始めて下さい。

Clone this wiki locally