Railsにはメールを送信してくれるAction Mailerという機能が標準で組み込まれています。
この機能を使えばアプリケーションからメールを簡単に送信できます。
😸 環境設定
Development環境で、メール送信に関するエラーをログに出力するようにします。
config.action_mailer.raise_delivery_errors = true
|
TestApp::Application.configure
内にメール送信用の設定をしてください。
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: メールサーバ認証用パスワード }
|
🚕 Mailerファイルの生成
次のコマンドでMailerに関するファイルをまとめて生成できます。
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
|
🏈 Mailerクラスの編集
次にMailerでメールを送信してみます。まずはメインのメソッドを作成します。
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形式も利用可能です。
コマンドラインからメールを送信してみます。
rails c
Message.hello.deliver
|
これでメールが、Messageクラスの『to@example.org』に送信されていれば、メール送信成功です。
🐰 MailerのRSpec
以下は、Action MailerのRSpecのサンプルです。
require rails_helper
RSpec.describe Notifications, type: :mailer do describe let(:mail) { described_class.signup }
it renders the headers do expect(mail.subject).to eq(Signup) expect(mail.to).to eq([to@example.org]) expect(mail.from).to eq([from@example.com]) end
it renders the body do expect(mail.body.encoded).to match(Hi) end end end
|
type: :mailer
を指定することでRSpec-railsのmailer用のメソッドを使うことができます。
🎂 補足:Action MailerのView内でHelperメソッドを使う場合
Action MailerのView内でhelperメソッドを使いたい場合は、add_template_helper(ApplicationHelper)
を追加すればつかえるようになるそうです。
class Message < ActionMailer::Base add_template_helper(ApplicationHelper) end
|
🐞 補足: Action Mailerのコールバック
Action Mailerにはbefore_action
、after_action
およびaround_action
というコールバック処理があります。
before_action
を使うことで、デフォルト値のセットやヘッダを挿入できます
after_action
はMailerのアクション内のインスタンス変数を利用した設定を行うことができます
class UserMailer < ApplicationMailer after_action :set_business_headers
def campaign_message(business, user) @business = business @user = user end
private
def set_business_headers if @business headers[X-SMTPAPI-CATEGORY] = @business.code end end end
|
👽 参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!