HerokuにあるアプリへSendGridアドオンをインストールし、メールを送信しようとしたところ、以下のエラーになりました。
Net::SMTPFatalError (550 Cannot receive from specified address : Unauthenticated senders not allowed
これはSMTPFatalError when sending mailにある通り、SendGridの認証が失敗しているため。
自分の場合、以下のような手順で発生しました。
- Heroku | Dev Center | Sendgridの通りにSendGridアドオンを設定し、本番用アプリから正しくメールを送れることを確認
- 同じリポジトリ(ディレクトリから)Herokuへステージング用環境を作成
- ステージング環境からメール送信したら、Net::SMTPFatalErrorが発生
結局、これは新しく作ったステージング環境にSendGridの認証に使う環境変数を設定していないことが原因でした。(本番環境はアドオンをインストールした時点で自動的に設定される)
本番用の環境変数に以下のものがあるので…
$ heroku config --app myapp
(中略)
SENDGRID_PASSWORD => パスワード
SENDGRID_USERNAME => ユーザ名@heroku.com
ステージング環境へも設定したら、無事、動きました。
$ heroku config:add SENDGRID_PASSWORD=パスワード --app myapp-staging
$ heroku config:add SENDGRID_USERNAME=ユーザ名@heroku.com --app myapp-staging
Sendgridに限らず、本番環境とステージング環境の環境変数の差違については、きちんと確認しておいた方が良いですね。
関連する記事: