前提・実現したいこと
問い合わせフォームを送信すると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
- こちらを参考にしました