酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

ActionMailer Railsアプリからメールを送信[Rails4.2 X Ruby2.3]

Railsにはメールを送信してくれるActionMailerという機能が標準で組み込まれています。 この機能を使えば、メールを送信するタイプのWebアプリを簡単に構築出来ます。 今回はActionMailerの基本的な設定の使い方を説明します。

(2016/01/10) Rails 4.2 x Ruby 2.3の動作確認。記事をリファクタリング


環境設定

Development環境で、メール送信に関するエラーをログに出力するようにします。

1
2
# config/environments/development.rb
config.action_mailer.raise_delivery_errors = true

TestApp::Application.configure内にメール送信用の設定をして下さい。

1
2
3
4
5
6
7
8
9
10
11
# config/environments/development.rb
# ↓ 以下を追加
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: "SMTPのメールサーバ",
  port: 587,
  domain: '送付するドメイン',
  user_name: "メールサーバ認証用ユーザー",
  password: "メールサーバ認証用パスワード"
}

ここの設定情報等はサンプルです。以下のようなサービスを設定して、送付情報をセットするといいと思います!

ActionMailerのクラスを生成

以下のコマンドで、ActionMailerのクラスを生成できます。

1
2
3
4
5
6
7
8
9
10
$ rails g mailer message hello
      create  app/mailers/message.rb
      create  app/mailers/application_mailer.rb
      invoke  haml
      create    app/views/message
      create    app/views/message/hello.text.haml
      invoke  rspec
      create    spec/mailers/message_spec.rb
      create    spec/fixtures/message/hello
      create    spec/mailers/previews/message_preview.rb

ActionMailerのクラスの編集

次にActionMailerでメールを送信してみます。

まずは、メインのメソッドを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# app/mailers/message.rb
class Message < ActionMailer::Base
  # デフォルトでの送信元のアドレス
  default from: "from@example.com"

  def hello(name)
    @name = name
    mail(
      to:      'to@example.net',
      subject: 'Mail from Message',
    ) do |format|
      format.html
    end
  end
end

メール用のViewを編集します。ファイル名を変えれば、html形式だけではなく、text形式でも利用可能です。

1
2
-# app/views/message/hello.html.haml
= "There is #{@name}'s body."

コマンドラインからメールを送信してみます。

1
2
3
4
5
# Rails console に入る
$ rails c

# メール送信
Message.hello.deliver

これでメールが、Messageクラスの『to@example.org』に送信されていれば、メール送信成功です。

補足:ActionMailerのView内でHelperメソッドを使う場合

ActionMailerのView内でhelperメソッドを使いたい場合は、add_template_helper(ApplicationHelper)を追加すればつかえるようになるそうです。

1
2
3
4
# app/mailers/message.rb
class Message < ActionMailer::Base
  add_template_helper(ApplicationHelper)
end

Special Thanks

変更来歴

  • 2013/02/13 20:55 新規作成
  • 2013/03/02 13:20 『補足:ActionMailerのView内でHelperメソッドを使う場合』を追記
  • 2016/01/10 14:15 最新の状況に合わせて内容をリファクタリング

おすすめの書籍