質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1213閲覧

HerokuのNet::SMTPFatalError (550 Unauthenticated senders not allowedを解決したい(Railsチュートリアル)

taka2477

総合スコア8

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2018/08/27 01:20

編集2018/08/27 01:43

前提・実現したいこと

Railsチュートリアルの11章でSendGridからメールが送られてこないエラーが発生しました。

Cloud 9では新しくユーザー登録後、Please check your email to activate your accountと画面上にきちんと表示されるのですが、Herokuの本番環境だとWe're sorry, but something went wrong.と出てしまい困ってます。

どなたか助言いただけないでしょうか?丸二日このエラーと格闘しており、
いろいろググって試してみましたが、解決法がわかりません。

発生している問題・エラーメッセージ

$ heroku logs

2018-08-27T00:47:30.841589+00:00 app[web.1]: I, [2018-08-27T00:47:30.841521 #6] INFO -- : [a6255093-4c52-4e32-9cd6-8a4216580976] Completed 500 Internal Server Error in 702ms (ActiveRecord: 11.7ms) 2018-08-27T00:47:30.842539+00:00 app[web.1]: F, [2018-08-27T00:47:30.842467 #6] FATAL -- : [a6255093-4c52-4e32-9cd6-8a4216580976] 2018-08-27T00:47:30.842630+00:00 app[web.1]: F, [2018-08-27T00:47:30.842569 #6] FATAL -- : [a6255093-4c52-4e32-9cd6-8a4216580976] Net::SMTPFatalError (550 Unauthenticated senders not allowed 2018-08-27T00:47:30.842632+00:00 app[web.1]: ): 2018-08-27T00:47:30.842744+00:00 app[web.1]: F, [2018-08-27T00:47:30.842663 #6] FATAL -- : [a6255093-4c52-4e32-9cd6-8a4216580976] 2018-08-27T00:47:30.842840+00:00 app[web.1]: F, [2018-08-27T00:47:30.842782 #6] FATAL -- : [a6255093-4c52-4e32-9cd6-8a4216580976] app/models/user.rb:48:in `send_activation_email' 2018-08-27T00:47:30.842842+00:00 app[web.1]: [a6255093-4c52-4e32-9cd6-8a4216580976] app/controllers/users_controller.rb:22:in `create'

該当のソースコード

production.rb

(中略) config.active_record.dump_schema_after_migration = false config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp host = 'https://アプリ名.herokuapp.com' config.action_mailer.default_url_options = { host: host } ActionMailer::Base.smtp_settings = { :address => 'smtp.sendgrid.net', :port => '587', :authentication => :plain, :user_name => ENV['ユーザー名@heroku.com'], :password => ENV['パスワード'], :domain => 'heroku.com', :enable_starttls_auto => true } end

app/models/user.rb

(中略) #永続セッションのためにユーザーをデータベースに記憶する def remember self.remember_token = User.new_token update_attribute(:remember_digest, User.digest(remember_token)) end def forget update_attribute(:remember_digest, nil) end #トークンがダイジェストと一致したらtrueを返す def authenticated?(attribute, token) digest = send("#{attribute}_digest") return false if digest.nil? BCrypt::Password.new(digest).is_password?(token) end #アカウントを有効にする def activate update_columns(activated: true, activated_at: Time.zone.now) end #有効化のメールを送信する def send_activation_email UserMailer.account_activation(self).deliver_now end private #有効化トークンとダイジェストを作成及び代入する def create_activation_digest self.activation_token = User.new_token self.activation_digest = User.digest(activation_token) end

users_controller.rb

def create @user = User.new(user_params) if @user.save @user.send_activation_email flash[:info] = "Please check your email to activate your account" redirect_to root_url else render 'new' end end

試したこと

1、Herokuにクレジットカード情報を登録

2、
$ heroku config:get SENDGRID_USERNAME
$ heroku config:get SENDGRID_PASSWORD
これでユーザー名とパスワードは表示されたものを入力してます。

3、
$ heroku config:add SENDGRID_PASSWORD=パスワード --app アプリ名
$ heroku config:add SENDGRID_USERNAME=ユーザ名@heroku.com --app アプリ名
これも試しました

4、再起動

補足情報(FW/ツールのバージョンなど)

Rails5.1.4
AWS Cloud 9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka2477

2018/08/27 01:45

失礼いたしました、修正しました。
guest

回答1

0

ベストアンサー

Ruby on Railsチュートリアルをようやく1周しただけのものですので、検討違いでしたら申し訳ありません。
同じところで、HEROKUのログでcreateと表示されるエラーを経験したものです。

ソースコードは、前後全てを完全にチュートリアルのものと見比べていただいたり、検証の為にコピペを貼り付け直したりされてみてもいいかと思いますが、私がわかりにくくて間違ったのは下記の点でした。
意味が理解できずいろいろと触っていましたがなかなか解消せず。最終的に、

リスト 11.41:

config/environments/production.rb

1 config.action_mailer.raise_delivery_errors = true 2 config.action_mailer.delivery_method = :smtp 3 host = '<your heroku app>.herokuapp.com' 4 config.action_mailer.default_url_options = { host: host } 5 ActionMailer::Base.smtp_settings = { 6 :address => 'smtp.sendgrid.net', 7 :port => '587', 8 :authentication => :plain, 9 :user_name => ENV['SENDGRID_USERNAME'], 10 :password => ENV['SENDGRID_PASSWORD'], 11 :domain => 'heroku.com', 12 :enable_starttls_auto => true 13 }

の、

host = '<your heroku app>.herokuapp.com'

だけを

host = 'https://実際の内容.herokuapp.com'

にかえる。
あとの内容はそのままで ターミナルで

$ heroku config:get SENDGRID_USERNAME $ heroku config:get SENDGRID_PASSWORD

でゲットしてから、 ターミナルでゲットしたものを=の右に

heroku config:set SENDGRID_USERNAME=(調べたSENDGRID_USERNAME) heroku config:set SENDGRID_PASSWORD=(調べたSENDGRID_PASSWORD)

で、値を設定。=の右側の値は'や”で囲む必要は無く、=の前後にスペースがあるとエラーも経験しました。

heroku run rails db:migrate

で、自分の場合はエラーが解消しました。参考になるといいのですが。

投稿2018/08/27 02:03

mi_

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka2477

2018/08/27 02:10

ご回答有難うございます。私も同じポイントで間違っているのかと思い、すでに助言いただいたことは試したのですが、エラー解消されません。他に原因があるようです・・・。
mi_

2018/08/27 02:19

:user_name => ENV['ユーザー名@heroku.com'], :password => ENV['パスワード'], この部分変更されたままになったりしていませんか? config.action_mailer.default_url_options = { host: host } も変更してしまっていたりとかもないでしょうか?
taka2477

2018/08/27 02:27

>この部分変更されたままになったりしていませんか? →両者とも調べたものを入力したままになってます。これではエラーが出てしまうということでしょうか? >config.action_mailer.default_url_options = { host: host } も変更してしまっていたりとかもないでしょうか? →これは原文通りで何も変更は加えてないです。
mi_

2018/08/27 02:31

間違って、何度もコメントすみません。 heroku addons:create sendgrid:starter をしたときに、ログは成功になっていたんですよね。 私の場合は、ログが成功にならなかったので、HEROKUに問い合わせして、解除してもらうところもやりました。
mi_

2018/08/27 02:32

いれちがいになりました。 :user_name => ENV['SENDGRID_USERNAME'], :password => ENV['SENDGRID_PASSWORD'], は変更したらいけないみたいです。 ここはこのままで、ターミナルでセットするのが、セキュリティ的にも正しくこのチュートリアルの内容になっているみたいです。
taka2477

2018/08/27 02:41

:user_name => ENV['SENDGRID_USERNAME'], :password => ENV['SENDGRID_PASSWORD'], 上記のとおり、元通りに直したら無事解決できましたー!!!!!本当にありがとうございました! この部分でハマる人、多そうですね(汗)
mi_

2018/08/27 02:43

自分もはまりました(^_^;) 分かってしまえば、パスワードを平文でかかないとかの意味もわかるんですが。書き換えるものと思ってました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問