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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

1035閲覧

【rails】Active Mailerを使ったメール送信について

kawanoonigiri

総合スコア14

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/08/31 07:27

編集2021/08/31 12:09

前提・実現したいこと

現在作成しているアプリケーションにてActive Mailerを使った問い合わせ機能を実装しています。
その中で、問い合わせが完了すると設定したGmail宛に自動で送付されてくるように設定したいのですがエラーが出ています。
下記サイトを元にアプリパスワードを生成しています。
2段階認証に未対応のアプリからのログイン用にアプリパスワードを生成する

また、アプリパスワードをメールに設定するため、指示通り「アカウント情報」内で「パスワード入力」欄を探してみるもわからない状態です。
Googleアカウントの指示

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

エラーの内容は以下の通りです。

Errno::ECONNREFUSED in InquiryController#thanks Connection refused - connect(2) for "localhost" port 25

該当のソースコード

development.rb

ruby

1 config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } 2 config.action_mailer.raise_delivery_errors = true 3 config.action_mailer.delivery_method = :smtp 4 config.action_mailer.smtp_settings = { 5 address: 'smtp.gmail.com', 6 port: 587, 7 domain: 'gmail.com', 8 user_name: '***@gmail.com', 9 password: '自身のアプリパスワード', 10 authentication: 'plain', 11 enable_atarttls_auto: true 12 } 13

inquiry_controller.rb

ruby

1class InquiryController < ApplicationController 2 def index 3 @inquiry = Inquiry.new 4 render :index 5 end 6 7 def confirm 8 @inquiry = Inquiry.new(params[:inquiry].permit(:name, :email, :message)) 9 if @inquiry.valid? 10 render :confirm 11 else 12 render :index 13 end 14 end 15 16 def thanks 17 @inquiry = Inquiry.new(params[:inquiry].permit(:name, :email, :message)) 18 InquiryMailer.received_email(@inquiry).deliver 19 render :thanks 20 end 21end

上記、user_nameとパスワードは伏せてあります。

設定方法お詳しい方いらっしゃいましたら、ご教授いただけますと大変助かります。

以上、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

gmail じゃなくて localhost の smtp に接続しようとしてます。

config.action_mailer.amtp_settings
smtp_settings が amtp_settings になってるからだと思います。

投稿2021/08/31 08:14

neko_daisuki

総合スコア2090

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

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

kawanoonigiri

2021/08/31 09:21 編集

neko_daisukiさん コメントありがとうございます。 「smtp_settings が amtp_settingsになっている」点は修正済みでして、その上での上記エラーが発生しております。 質問内容については即時修正いたしました。 また、「gmail じゃなくて localhost の smtp に接続しようとしてます。」とありますが、該当の記述は 「 config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }」こちらでよろしいでしょうか。 情報が不足しているようでしたら追記いたしますので、よろしくお願いいたします。
neko_daisuki

2021/08/31 09:49

localhost に接続しようとしていると判断したのはログの方です。 Connection refused - connect(2) for "localhost" port 25 実行環境と config.config.action_mailer.smtp_settingsを記載したファイルは合っていますか? 開発環境なら config/envirnments/development.rb
kawanoonigiri

2021/08/31 10:08

はい、こちらの記述は config/envirnments/development.rbに記述しています。
neko_daisuki

2021/08/31 10:21

bin/rails c して、 ActionMailer::Base.delivery_method と打つと :smtp と返ってくるか、 ActionMailer::Base.smtp_settings で config と同じ内容になっているか確認してみてください。 また、コンソールから送信できないかも確認をお願いします。 ContactMailer の post メソッドで送信するなら以下のような感じになります。 ContactMailer.post.deliver_now!
neko_daisuki

2021/08/31 10:22

あと、アプリパスワードはconfigのパスワードのところに張り付ければ良いです。 Macの設定は関係ないはずです。
kawanoonigiri

2021/08/31 11:26

度々コメントありがとうございます。 上記コマンドをそれぞれ試してみたところ、以下の結果になりました。 ActionMailer::Base.delivery_method => :smtp ActionMailer::Base.smtp_settings => {:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true} ContactMailer.post.deliver_now! NameError: uninitialized constant ContactMailer Did you mean? ActionMailer ActionMailer.post.deliver_now! NoMethodError: undefined method `post' for ActionMailer:Module
neko_daisuki

2021/08/31 11:38

smtp_settings が反映されてないみたいですね。 反映されない原因は spring が悪さをしているかもしれないので、 spring stop としたあとに rails を起動してメールを送信してみてください。 これでダメだと (1)設定がどこかで上書きされている (2)development 以外の環境で動作している だと思います。 (1) はデフォルトの設定が返ってきているので考えにくいです。 (2) は bin/rails c としたときに、Loading development environment と表示されていますよね? コンソールからの送信はできていないみたいです。 コントローラーからはどうのようにメールを送信していますか?
kawanoonigiri

2021/08/31 12:05

ご指示いただきました通り spring stop後再度rails cにて ActionMailer::Base.smtp_settingsを実行したところ => {:address=>"smtp.gmail.com", :port=>587, :domain=>"gmail.com", :user_name=>"<***@gmail.com>", :password=>"<アプリパスワード>", :authentication=>"plain", :enable_atarttls_auto=>true} ※user_nameとpasswordは置き換えてありますが、設定通りの値に変わりました。 (2)についてはおっしゃる通りコンソール起動時にLoading development environment (Rails 6.0.4.1)と出ています。 コントローラーについてはこちらに書くと見辛くなりそうなので、質問内容に追記いたします。 また、作成中のアプリケーションより問い合わせできるか確認してみたところ、エラー内容が下記に変わりました。 Net::SMTPAuthenticationError in InquiryController#thanks 535-5.7.8 Username and Password not accepted. Learn more at
kawanoonigiri

2021/08/31 12:50

ご回答ありがとうございます。 無事送信完了メールが届くよう設定できました。 下記記述でそれぞれ<>の記述を使っていますが、こちらが不要だったようです。 user_name: '<***@gmail.com>', password: '<アプリパスワード>', 下記内容に修正したところ送信完了画面遷移&メール受信まで完了しました。 user_name: '***@gmail.com', password: 'アプリパスワード', 最後まで丁寧にご指導いただきまして、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問