前提・実現したいこと
heroku本番環境でのメールの送信ができないので送信できるようにしたい。
発生している問題・エラーメッセージ
heroku logs --tail --app アプリ名 にてログを確認。
送信後、開発環境では送信が成功されるが本番環境では
ArgumentError (SMTP To address may not be blank: []):
と表示されます。
該当のソースコード
production.rb
ruby
1Rails.application.configure do 2 〜ここまで割愛 3 4ActiveRecord::Middleware::DatabaseSelector::Resolver::Session 5 config.action_mailer.raise_delivery_errors = true 6 config.action_mailer.delivery_method = :smtp 7 config.action_mailer.smtp_settings = { 8 address: 'smtp.sendgrid.net', 9 port: 587, 10 domain: 'heroku.com', 11 user_name: 'apikey', 12 password: ENV['SENDGRID_APIKEY'], 13 authentication: 'plain', 14 enable_starttls_auto: true 15 } 16end
contacts_controller.rb
ruby
1class ContactsController < ApplicationController 2 def new 3 @contact = Contact.new 4 end 5 6 def create 7 @contact = Contact.new(contact_params) 8 if @contact.save 9 ContactMailer.contact_mail(@contact).deliver 10 flash[:success] = 'フォームを送信しました。' 11 redirect_to root_path 12 else 13 render :new 14 end 15 end 16 17 private 18 19 def contact_params 20 params.require(:contact).permit(:name, :message) 21 end 22end 23
contact_mail.erb
ruby
1<%= @contact.name%>様からのメッセージです。 2 3=========================== 4 5 【お問合せ内容】 6 <%= @contact.message %> 7 8===========================
contact_mailer.rb
ruby
1class ContactMailer < ApplicationMailer 2 def contact_mail(contact) 3 @contact = contact 4 mail to: ENV["TO_MAIL_ADDRESSE"], subject: "お問い合わせについて【自動送信】" 5 end 6 7end
application_mailer.rb
ruby
1class ApplicationMailer < ActionMailer::Base 2 default from: 'from@example.com' 3 layout 'mailer' 4end 5
new.html.erb
ruby
1<h2 class="title8">CONTACT</h2> 2 3<%= form_with model: @contact do |form| %> 4 <div class="Form"> 5 <div class="Form-Item"> 6 <p class="Form-Item-Label"> 7 <span class="Form-Item-Label-Required"></span>氏名</p> 8 <%= form.text_field :name, placeholder: "例)山田太郎", class:"Form-Item-Input" %> 9 </div> 10 11 <div class="Form-Item"> 12 <p class="Form-Item-Label isMsg"><span class="Form-Item-Label-Required"></span>お問い合わせ内容</p> 13 <%= form.text_area :message, placeholder: "例) 14 件名 15 ----------------------------------------------- 16 メールアドレス 17 内容",class:"Form-Item-Input area" %> 18 </div> 19 <%= form.submit "送信する", class:"Form-Btn"%> 20 </div> 21<% end %> 22
development.rb
ruby
1Rails.application.configure do 2 〜ここまで割愛 3 4 config.file_watcher = ActiveSupport::EventedFileUpdateChecker 5 6 config.action_mailer.raise_delivery_errors = true 7 config.action_mailer.delivery_method = :smtp 8 config.action_mailer.smtp_settings = { 9 address: 'smtp.gmail.com', 10 port: 587, 11 domain: 'gmail.com', 12 user_name: ENV['G_MAIL_ADDRESS'], 13 password: ENV['G_MAIL_PASSWORD'], 14 authentication: 'plain', 15 enable_starttls_auto: true 16 } 17end
試したこと
最初はproduction.rbも「user_name」「password」をsendgridのユーザー名、パスワードを「heroku config:set ~」にて設定していたのですが、調べていくとsendgridの仕様が2021/1/20辺りからAPI KEYをつかい、上記のproduction.rbの書き方になったそうです。
一応従来のユーザー名、パスワードの方法も含め試したのですがエラーを吐いてしまいます。
おそらくですがどちらのやり方でも環境変数がうまく本番環境から読み込めていないのではないかと考えているのですが、どのようにすれば読み込んでもらえるのかわかりません。
どうかご有識のある方ご教授ください。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
参考文献
仕様が変わったとの記事
https://www.bokukoko.info/entry/2020/12/07/080000
環境変数について
https://qiita.com/Sinhalite/items/9732229f4f0e781abd1c
あなたの回答
tips
プレビュー