guache
@guache (郡司 いたみ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Ruby on Rails】本番環境でメールを送ろうとするとエラーになります

Qiita・プログラミング初心者です。
至らぬことが多いですが、よろしくお願いします。

実行環境

ruby 2.6.3
Rails 6.1.6.1
AmazonのEC2、RDS、デプロイにPumaとNginxを利用しています。

解決したいこと

Ruby on Railsでコミュニティサイト風のWebアプリを制作中です。
お問い合わせ機能(問い合わせ完了で管理者に通知メールが届く)に挑戦しています。
開発環境ではメールの受け取りまで上手くいきましたが、本番環境で送信を押すと
error.jpg
エラーが発生します。

発生している問題・エラー

EC2にログインしてtail -f production.logで確認すると

F, [2022-12-18T09:26:58.404241 #5852] FATAL -- : [c9437e69-7b50-41ed-bc5b-49f6b74c0115]   
[c9437e69-7b50-41ed-bc5b-49f6b74c0115] ArgumentError (SMTP To address may not be blank: []):

宛先が空になっているということでしょうか。
gem 'dotenv-rails'と.env(と.gitignore)を利用して、送り先や送信元の情報の受け渡しは上手くいっているはずなのですが…

該当するソースコード

app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from: '自分'
  default to: ENV["TOMAIL"]
  layout 'mailer'
end
.env
TOMAIL="送り先@gmail.com"
SMTP_USERNAME='送信元@gmail.com'
SMTP_PASSWORD='gmailアドレスのパスワード'

送り先と送信元は同じアドレス(私用)にしています。

config/environments/production.rb
config.action_mailer.default_url_options = { host: 'http://アプリ名.com'}
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      port: 587,
      address: 'smtp.gmail.com',
      domain: 'smtp.gmail.com',
      user_name: ENV['SMTP_USERNAME'],
      password: ENV['SMTP_PASSWORD'],
      authentication: 'plain',
      enable_starttls_auto: true
  }
end

本番環境の設定はproductionで行うということで、このように記述しています。

自分で試したこと

初めは上記以外にルーティングエラーも発生していたので、コントローラと合わせて修正してみました。

config/routes.rb
scope module: :public do
    resources:inquiries,only:[:new, :create]
    post 'inquiries/confirm'=> 'inquiries#confirm',as: "confirm"
    get 'inquiries/thanks' => 'inquiries#thanks',as: "thanks"
end
public/inquiries_controller.rb
class Public::InquiriesController < ApplicationController
    def new
    #入力画面
    @inquiry=Inquiry.new
  end

  def confirm
    #確認画面
    @inquiry = Inquiry.new(inquiry_params)
    render :new unless @inquiry.valid?
  end

  def create
    @inquiry = Inquiry.new(inquiry_params)
    InquiryMailer.send_mail(@inquiry).deliver
    redirect_to "/inquiries/thanks"
  end

  def thanks
  end

  private
  def inquiry_params
    params.require(:inquiry).permit(:name, :message)
  end
end

が、うまくいかず。
ローカル環境では送信できているので、やはりconfig/environments/production.rbの設定が間違っているのでしょうか。ご教示いただけると嬉しいです。

0

2Answer

ローカル環境では送信できている
抜け目なく Amazon Simple Email Service (Amazon SES)の宣伝もありますが。

これで酷い目に会いました。申請後、postfixに溜まっメールが解放感から急激に飛び出し、着信側のMTAでDoS扱いされました。

0Like

Comments

  1. @guache

    Questioner

    ありがとうございます!
    そもそもEC2からメール送信できないように制限されてるんですね…
    紹介していただいた記事を読み込んで、引き続き色々試してみようと思います!

Comments

  1. @guache

    Questioner

    ありがとうございます!
    ENV["TOMAIL"]部分を実際の送り先のアドレスに変えてみましたが、エラーになりました。
    引き続き色々試してみようと思います!

Your answer might help someone💌