Heroku+SendGrid+Rails6(devise)の本番環境でメール送信する方法

Heroku+SendGrid+Rails6(devise)の本番環境でメール送信する方法

【2020年9月】Rails6アプリを本番環境(Heroku)にデプロイ方法を画像付きで徹底解説の続き。

deviseを入れただけだとメール機能がHeroku本番環境で使えないので、SendGridアドオンを追加してDeviseを有効化する手順になります。

ちなみに、僕はSendGridからアカウント凍結されて、サポートに問い合わせても凍結解除してもらえなかったので、新しくherokuでアプリを作り直し、デプロイし直しました。

まじで、SendGridはすぐにアカウント凍結される。。。

SendGridアカウント凍結バン

Item could not be created:
An error was encountered when contacting the add-on partner to create sendgrid:starter: Error Provisioning User – User status – banned

こうなると、アカウントがbanされた状態になり、Add-onsだけを再作成しても変わりません。

では、早速やっていきましょう。

HerokuのSendGridアドオンを有効にしてAPIキーを生成

以下コマンドでアドオンを追加します。(starterは無料利用プラン)

$ heroku addons:create sendgrid:starter

herokuにログインして、Herokuのアプリ一覧から作成したアプリをクリックして選択します。

アプリのページへ遷移したら、 resourcesタブをクリックし、Add-ons 一覧に追加されているSendGridをクリックしてください。

herokuアドオン一覧

別タブでSendGridの設定画面が開いて、まずメール認証をしろと出るので、メールアドレスを入力してメール認証する。

メール認証が終わったら、APIキーを作成するので、左メニューバーから 「Settingsタブ」内にある「API Keys」を選択します。

右上の「Create API Key」を押すと下の画面になるので、「API Key Names」にアプリの名称を入力し、「Full Access」 を選択し、「Create & View」をクリックします。

SendGridのAPIキー作成

API Key Created画面にあるランダムな文字列がAPIキーになるので、コピーしてメモしておきましょう。

Herokuの環境変数にSendGridのAPIKeyを追加

先ほど、取得したAPIキーをHerokuの環境変数にセットします。

Rails6アプリの設定にAPIキーを直書きするのは危険なので必ず環境変数を使うようにしましょう。

下記コマンドを実行

$ heroku config:set SENDGRID_API_KEY=作成したAPIキー

Setting SENDGRID_API_KEY and restarting ⬢ アプリ名... done, vxxと出ていればセットされています。

さらに、下記コマンドを実行でheroku configにSendgridのusername / passwordが追加されてるか確認します。

$ heroku config

出力される内容はこんな感じです。

SendGrid導入

API Keyが反映されていることも確かめておきます。

smtp設定を行う

config/environments/production.rbに行き、以下の様に追記、変更を行なう。

config.action_mailer.default_url_options = { :host => 'https://www.ドメイン名.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,
  :address => "smtp.sendgrid.net",
  :port => 587,
  :domain => "heroku.com",
  :authentication => :plain,
  :user_name => ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
}

デプロイし、最後にmigrateを忘れずに

$ heroku run rails db:migrate

これでdeviseのサインアップ機能等が使える様になり、メール認証もできるようになるはずです。

僕はこれで、メールがちゃんと届きました。

送信元のメールアドレスを変更したいとき

送信元のメールアドレスを変更したいときは、config/initialisers/devise.rbの下記の部分を編集すれば送信元のメアドにも反映されます。

config.mailer_sender = 'example@example.com'

 

他にもこんな記事があります!