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

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

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

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

Q&A

1回答

821閲覧

Action Mailerを用いたときにメールが送信できない

naiurhg

総合スコア13

Ruby on Rails

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

0グッド

0クリップ

投稿2021/09/17 05:19

編集2021/09/17 12:29

前提・実現したいこと

問い合わせフォームを送信するとgmailを送信する機能を作りたいです。

問い合わせフォームを入力し、確認画面までは表示されました。
しかし、メールを送信したときに以下のエラーメッセージが発生しました。
指摘された行は、contacts_controller.rbのcreateの部分です。

パラメータ(/contacts/new)(入力画面):
controller: contacts
action: new
permitted: false

パラメータ(/contacts/confirm)(確認画面):
name: test-name
email: test@gmail.com
message: test
permitted: false
commit: 確認
controller: contacts
action: confirm

パラメータ(エラー):
"contact"=>{"name"=>"test-name", "email"=>"test@gmail.com", "subject"=>"0", "message"=>"test"},
"commit"=>"送信"

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

Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at ):

該当のソースコード(config/environments/development.rb)

development.rb

1config.action_mailer.raise_delivery_errors = true 2 config.action_mailer.delivery_method = :smtp 3 config.action_mailer.smtp_settings = { 4 port: 587, 5 address: 'smtp.gmail.com', 6 domain: 'gmail.com', 7 user_name: ENV['SMTP_USERNAME'], 8 password: ENV['SMTP_PASSWORD'], 9 authentication: 'plain', 10 enable_starttls_auto: true 11 }

該当のソースコード(app/controller/contacts_controller.rb)

contacts_controller.rb

1class ContactsController < ApplicationController 2 def new 3 @contact = Contact.new 4 end 5 6 # 確認画面 7 # newアクションから入力内容を受け取り、送信ボタンを押されたらcreateアクションを実行 8 def confirm 9 @contact = Contact.new(contact_params) 10 if @contact.invalid? 11 render :new 12 end 13 end 14 15 def back 16 @contact = Contact.new(contact_params) 17 render :new 18 end 19 20 # 実際に送信するアクション 21 def create 22 @contact = Contact.new(contact_params) 23 if @contact.save 24 ContactMailer.send_mail(@contact).deliver_now # エラーで指摘されている行 25 redirect_to done_path 26 else 27 render :new 28 end 29 end 30 31 # 送信完了画面 32 def done 33 end 34 35 private 36 37 def contact_params 38 params.require(:contact) 39 .permit(:email, 40 :name, 41 :subject, 42 :message 43 ) 44 end 45end

該当のソースコード(入力画面)(config/routes.rb)

resources :contacts, only: [:new, :create] post 'contacts/confirm', to: 'contacts#confirm', as: 'confirm' post 'contacts/back', to: 'contacts#back', as: 'back' get 'done', to: 'contacts#done', as: 'done'

該当のソースコード(app/mailers/application_mailer.rb)

class ApplicationMailer < ActionMailer::Base default from: 'from@gmail.com' layout 'mailer' end

該当のソースコード(全メーラー共通の設定)(app/mailers/application_mailer.rb)

class ApplicationMailer < ActionMailer::Base default from: 'from@gmail.com' layout 'mailer' end

該当のソースコード(メーラー個別の設定)(app/mailers/user_mailer.rb)

class ContactMailer < ApplicationMailer def send_mail(contact) @contact = contact mail( to: ENV['TOMAIL'], subject: '【お問い合わせ】' ) end end

試したこと

  • Google側で2段階認証をオン
  • アプリケーション用のパスワードを発行
  • ユーザ名とパスワードは合っています(入力ミスはしていない)

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

  • Ruby on Rails
  • AWS cloud9
  • こちらを参考にしました

参考ページ

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

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

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

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

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

MasaSakano

2021/09/17 11:46

`ContactMailer` クラスは、Rails標準ではありません。だから、そのクラスが何をしているかをちゃんと説明しないと(端的にはコードがないと)回答は難しい、というか無理です。理想的には、外部クラスを使うのではなく、Controller内部で閉じるようにコーディングした例を投稿されると、読む人にはわかりやすいです。 エラーメッセージは、Username and Password が間違っている、ですね。「正しい」ということですが、その正しさをどのように確認されましたか? 端的には、Gmailにパラメーターが渡される直前の段階で意図通りにセットされているでしょうか? その確認はどう行いましたか? その辺りの情報がほしいところです。
naiurhg

2021/09/17 12:26

ご指摘ありがとうございます。情報が不足していました。 ソースコードの追加、不足している説明を訂正しました。
guest

回答1

0

当てずっぽうですが、以下が解決の手がかりになるかもしれません。

Google Gmail は、デフォルトでは、less secure applications からのアクセスを許可していません。「安全性が確認されていないアプリ」とは、要するに、個人開発のアプリすべてに当てはまります。

その設定が行われていない場合、エラーが出て、アクセスに失敗します。535-5.7.8 のエラーコードがそれに該当するようです(参考: GoogleのForumの記事(英語))。

だから、自分で該当Googleアカウントにログインしてそれを設定する必要があります。
設定方法は、Google本家のヘルプ(英語)をどうぞ。日本語は、こちらの記事を見かけたことはあります……が、私自身では確認していません。ググると情報は他にも見つかるでしょう。

なお、この設定は、しばらく使っていないと自動的にOFFになってしまうので、再度、Googleにログインして陽に設定する必要があります。ご注意下さい。

他の設定はそれでよさそうに見えるもので、以上が気づいたことです。試してみてはいかがでしょうか。

投稿2021/09/17 13:44

MasaSakano

総合スコア188

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

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

naiurhg

2021/09/18 11:52

回答ありがとうございます。 「安全性の低いアプリのアクセス」の有効は試しました。しかしエラーがでたため、アプリ用のパスワードを作って行っています。他の記事やコードを見返して解決したいと思います。
MasaSakano

2021/09/18 11:57

すでに有効化させていましたか。思いつくのは、以下の設定がひょっとしたら関係するかも……。 `config.action_mailer.perform_deliveries = true`
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問