WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

development環境でのActionMailerの設定

      2015/05/24

メールの送信を行うアプリケーションではメールまわりの設定を正しく行わないとメールの送信ができないため、以下の手順で設定を行う。
※ここではdevelopment環境での設定を行う。

メール送信時のエラー通知を有効化

まず、デフォルトではActionMailerを利用してメールを送信する際に、なんらかのエラーが発生しても例外があがらないようになっているため、これを修正する。
config/environments/development.rbを開き、”config.action_mailer.raise_delivery_errors”をtrueにする。これでメール送信時にエラーが起きたら例外があがるようになる。

$ vi config/environments/development.rb
config.action_mailer.raise_delivery_errors = true

SMTPの設定

前述したメール送信時のエラー通知の有効化を行なった上でメール送信処理を行ったとき、以下のようなエラーが出る場合はメール送信に必要な設定ができていない。

Completed 500 Internal Server Error in 532ms

Errno::ECONNREFUSED - Connection refused - connect(2):

メール送信に利用するSMTPサーバの情報を設定ファイルに記述しないとダメらしい。
config/environments/development.rbに以下をSMTPサーバの設定情報に置き換えた上で追記する。

  config.action_mailer.smtp_settings = {
    :address        => "smtp.gachinko.org", # SMTPサーバのホスト名
    :port           => 587,                 # SMTPサーバに接続するポート番号
    :user_name      => "hoge",              # ユーザ名
    :password       => "securepassword",    # パスワード
    :authentication => :plain               # 認証が必要なサーバの場合、特定の認証方式をここで指定
  }

※検索したところ、development環境ではGmailのSMTPサーバを利用している人が割といる。

続・SMTPの設定

Gitなどのバージョン管理システムを利用する手前、config/environments/development.rb にパスワードを直書きしたくないという場合はこのSMTPの設定自体を別ファイルに分離する方法がある。

まず、configディレクトリに直下にemail.ymlという設定ファイルを用意し、YAMLでSMTPの設定情報を記述しておく。

$ vi config/email.yml
development:
  :address: smtp.gachinko.org
  :port: 587
  :user_name: hoge
  :password: securepassword
  :authentication: plain

あとは、config/initializers/直下にsetup_mail.rbというファイル名で以下の通り記述して保存する。

if Rails.env != 'test'
  email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
  ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end

これでconfig/email.ymlをバージョン管理システムで追跡対象外(例えばGitでは.gitignoreで指定)としておけば設定情報をバージョン管理システムから分離することができる。

 - Ruby on Rails , , ,