tapitapi’s blog

1日1杯タピオカ!エンジニア

【Ruby on Rails】Action Mailer設定

送信元としてgmail を使ってメール送信する際に、Mailerの設定(下記の手順3.)でつまづいたので、設定について調べてみました。

tapitapi.hatenadiary.com

 

設定について公式ドキュメントを読んで理解を深めることに。(日本語の公式ドキュメントには翻訳されていない部分があったので、英語バージョンを参考にしました)

guides.rubyonrails.org

 

今回確認するのは下記の設定(config/environments/production.rbに設定を記載)

config.action_mailer.default_url_options = { host:  example.comなど,appのホスト名)}
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.asset_host = example.comなど,appのホスト名

 

ActionMailer::Base.smtp_settings = {
 :user_name => ENV['SENDGRID_USERNAME'],
 :password => ENV['SENDGRID_PASSWORD'],
 :domain => 'gmail.com',
 :address => 'smtp.sendgrid.net',
 :port => 587,
 :authentication => :plain,
 :enable_starttls_auto => true,
    :openssl_verify_mode => 'none',
    :ssl => true,

    :tls => true

}

 

1. default_url_options

参考:

https://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views

 

mailer の実態は、app/mailers/application_mailer.rbで定義されている、class ApplicationMailer < ActionMailer::Base。

 

「これは、app/controllersで定義されているコントローラと違い、入ってきたリクエストの情報を持たないので、host を定義しないとURLを作成できない」

 

とのこと。必ず設定しないとメール用のview内でパスを記載できないっぽいです。

また、普段はviewの中では*_pathを使いますが、メール用のview内では下記のように、*_urlを使うことに注意です。

<%= link_to 'welcome', welcome_url %>

 

私はconfig/environments/production.rbにdefault_url_optionsを記載したのですが、公式ではconfig/application.rbに記載できるよ!と書いてありました。

(host情報は一般的にアプリケーション内で変わらない定数なため)

 

ただ、テスト環境と本番環境でhostが変わるので、production.rbとdevelopment.rbで別々のhostを指定するのが良いと思います。

 

2. perform_deliveries

参考:

https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration

 

実際にメール送信するかを設定できるようです。

デフォルトではtrueなので、本番環境では設定必要ないですね。

テスト環境ではfalse にしたり、ユーザの権限が管理者ならthanksメールを送らないようにfalseにしたりなどで使えそうです。

 

3. raise_delivery_errors

参考:

https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration

 

メール送信に失敗した時に、エラーを発生させる場合はtrue。

メルマガのように、複数人に一斉送信のような場合は、falseにした方が良いと思います。

true  の場合も、mailerを実行しているコントローラ上で、エラー処理を書く必要があるかな。

テスト環境の場合は常にtrueで良さそうです。

 

 4. asset_host

参考:

https://guides.rubyonrails.org/action_mailer_basics.html#adding-images-in-action-mailer-views

 

1.と似ていますが、これはimage_tag、javascript_tag, stylesheet_tag をメール用のview内で使うために設定します。これを設定すると、下記のようにいつもの*_tagが使用できるようになります。

<%= image_tag 'image.jpg' %>

 

5. smtp_settings 

参考:

https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration

*user_name

gmailなど、リモートのメールサーバを使う際に、Basic認証が必要場合は、そのユーザ名を設定する。ENV['SENDGRID_USERNAME']のように、環境変数を使用した方がいいですね。

 

*password

gmailなど、リモートのメールサーバを使う際に、Basic認証が必要場合は、そのパスワード設定する。

 

*domain

SMTPクライアントのHELOドメインを記載。gmailを使う場合は、”gmail.com” を設定。

gmailの場合の設定値は下記参照

support.google.com

 

*address

リモートのメールサーバを使用する時に、アドレスを設定。

HerokuでSendgridを使う場合は、”smtp.sendgrid.net”を設定する。

参考:

https://devcenter.heroku.com/articles/sendgrid#configure-actionmailer-to-use-sendgrid

 

*port 

SMTPのポートを指定。

gmail  でSSLなら465、TLSなら587。TLS推奨( SSL の後継バージョンが TLSのため)

STARTTLS とは。SSL と TLS と STARTTLS の違い - wjmax blog

 

*authentication

:plain(パスワード暗号化なし), :login(Base64エンコードしたパスワード送信), :cram_md5(パスワード暗号化あり) が選べる。

gmailがこれらの認証に対応しているか不明だったのですが、cram_md5 に対応しているメールサーバを使用する場合は、cram_md5 にしておいた方が無難かと思います。

 

*enable_starttls_auto

メールサーバがSTARTTLSに対応しているか検知した場合に、自動でSTARTTLSを使用する場合はTrue


*openssl_verify_mode

TLSを使用する場合、OpenSSLが証明書をチェックする方法を設定できます。

'none', 'peer', 定数(OpenSSL :: SSL :: VERIFY_NONEまたはOpenSSL :: SSL :: VERIFY_PEER)を直接使用できます。

 

OpenSSLの証明書について

「サーバー証明書の検証」について


*ssl/tls

sslを使用する場合、ssl=true,tlsを使用する場合はtls=trueなのかな?と思いましたが、とりあえずどちらもtrueにしておきました、、、

 

以上ですーーーー!!

 

今回色々と設定について調べていくうちに、サーバや、ネットワーク、SMTPの仕組みなど自分の知識不足が分かりました、、、

下記サイトを先輩にお勧めされたので、ちょっとずつ読んでいこうと思います

www5e.biglobe.ne.jp

 

おやすみなさいいいぃぃぃ