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

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

ただいまの
回答率

89.89%

rails本番環境にてメールが送信できない。

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 153

Giga-Bakken

score 1

前提・実現したいこと

railsでチャットアプリを開発しております。
メールサーバーはconohaのメールサーバーを利用しており、サンダーバードにて送受信はできております。
deviseを利用しており、会員登録時などにメール認証を活用していますが、本番環境ではメールを送信できず、画面遷移も
"500 Internal Server Error"ページに遷移してしまいます。
しかしながら、データベースには登録されています。(当然、認証メールが届かないのでアカウントは利用不可)

メール送信、正しい画面遷移を実現したいと考えています。
どんなことでも良いのでコメントをいただけると幸いです。よろしくお願いいたします。

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

production.log
ログではメールを送ろうとしているみたいです。。。

I, [2020-01-02T03:45:14.860731 #729]  INFO -- : [*] Started POST "/users/confirmation" for IPアドレス at 2020-01-02 03:45:14 +0900
I, [2020-01-02T03:45:14.861993 #729]  INFO -- : [*] Processing by Devise::ConfirmationsController#create as HTML
I, [2020-01-02T03:45:14.862094 #729]  INFO -- : [*]   Parameters: {"utf8"=>"✓", "authenticity_token"=>"***", "user"=>{"email"=>"メールアドレス"}, "commit"=>"送信"}
D, [2020-01-02T03:45:14.864029 #729] DEBUG -- : [*]   User Load (0.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`unconfirmed_email` = 'メールアドレス' ORDER BY `users`.`id` ASC LIMIT 1
D, [2020-01-02T03:45:14.866518 #729] DEBUG -- : [*]   User Load (0.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`email` = 'メールアドレス' ORDER BY `users`.`id` ASC LIMIT 1
D, [2020-01-02T03:45:14.867093 #729] DEBUG -- : [*]    (0.1ms)  BEGIN
D, [2020-01-02T03:45:14.868245 #729] DEBUG -- : [*]    (0.1ms)  COMMIT
I, [2020-01-02T03:45:14.869725 #729]  INFO -- : [*]   Rendering devise/mailer/confirmation_instructions.html.erb
I, [2020-01-02T03:45:14.870078 #729]  INFO -- : [*]   Rendered devise/mailer/confirmation_instructions.html.erb (0.3ms)
D, [2020-01-02T03:45:14.870521 #729] DEBUG -- : [*] Devise::Mailer#confirmation_instructions: processed outbound mail in 1.8ms
I, [2020-01-02T03:45:14.872170 #729]  INFO -- : [*] Sent mail to メールアドレス (1.6ms)
D, [2020-01-02T03:45:14.872213 #729] DEBUG -- : [*] Date: Thu, 02 Jan 2020 03:45:14 +0900
From: 送信元メールアドレス
Reply-To: 送信元メールアドレス
To: 受信先メールアドレス
Message-ID: <5e0ce8bad4b98_2d92b282c18467c41816@163-44-170-225.mail>
Subject: =?UTF-8?Q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=AE=E6=9C=89=E5=8A=B9=E5=8C=96=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6?=
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: base64

暗号化された文字列

I, [2020-01-02T03:45:14.872669 #729]  INFO -- : [*]   Rendering errors/internal_server_error.html.erb within layouts/error
I, [2020-01-02T03:45:14.872868 #729]  INFO -- : [*]   Rendered errors/internal_server_error.html.erb within layouts/error (0.1ms)
I, [2020-01-02T03:45:14.873108 #729]  INFO -- : [*] Completed 500 Internal Server Error in 11ms (Views: 0.7ms | ActiveRecord: 1.2ms)

該当のソースコード

production.rb

  # ActionMailer
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { host: 'ドメイン名', :protocol => 'https' }
  host = 'ドメイン名'
  config.action_mailer.smtp_settings = {
    :address => "smtp.ドメイン名.conoha.io",
    :port => '587',
    :authentication => :plain,
    :user_name => "メールサーバーのユーザー名",
    :password => ENV["MAIL_PASSWORD"],
    :domain => 'ドメイン名',
    :enable_starttls_auto => true
}

試したこと

下記のサイトを参考に試行錯誤しましたが解決できませんでした。
Rails Guide Action Mailer の基礎
【Rails】ConoHaメールサーバーを契約してRailsアプリからメール送信する方法

基本的に検索するとGMAILの記事が多かったです。
現在私が考えている可能性といたしましては、Active Jobに原因があるのかなと考えております。
Rails Guide Active Job

railsのメール機能(ActionMailer)にもデフォルトでActiveJobが使われているらしく、ActiveJobの本番対応をしていないのが現状です。

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

ruby
rails 5.1.6
ActionCable(websocket)
mysql
capistrano
unicorn
nginx
devise gem
conohaVPS
CentOS8
ssl let's encrypt
ConohaVPSのメールサーバー
サンダーバード
ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • no1knows

    2020/01/13 18:49

    まず、回答していただいた方のコメント欄にやってどうなったかを記載するようにしたほうが良いかと思います。
    それによってさらなるサポートを受けられるかもしれません。

    >メールサーバーとの問題であることが確定。
    と記載がありますが、主語がないので何を意味しているかわからないのですが…
    今回の質問の「本番環境でメール送信できない」のは、「メールサーバーとの接続がうまくいっていない」からと判明したということでしょうか?

    キャンセル

  • Giga-Bakken

    2020/01/13 20:50

    左様でございます。

    キャンセル

  • no1knows

    2020/01/14 05:42

    >まず、回答していただいた方のコメント欄にやってどうなったかを記載するようにしたほうが良いかと思います。
    >それによってさらなるサポートを受けられるかもしれません。

    キャンセル

回答 3

+2

どんなことでも良いのでコメントがほしいとの事なので回答します。
エラーで

I, [2020-01-02T03:45:14.872669 #729]  INFO -- : [*]   Rendering errors/internal_server_error.html.erb within layouts/error

とあるので、viewの記載内容に誤りがあるのではと推測します。

https://railsguides.jp/action_mailer_basics.html
にある、cronjobなどから今すぐ送信したい場合はの箇所を参考にして単にメールを送れるかを確認してみてはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/02 19:13

    コメントありがとうございます。

    キャンセル

+2

メールのレンダリングは正常に挙動しているが、メールサーバとの間で何かしら問題があり、Internal Server Errorとなっていると推測します。

したがって、まず以下のように config.action_mailer.raise_delivery_errorsのでfalseを指定し メールサーバとの間の問題かどうかをはっきりさせてみてください。

  config.action_mailer.raise_delivery_errors = false

この状態で、会員登録を実行しエラーにならなければ、メールサーバとの間で何かしら問題が起きていることがほぼ確実となります。(会員登録の前にrailsの再起動を忘れないでくださいね。)

さて、メールサーバとの間の問題であれば、どんなエラーが発生しているかを知りたいので、エラー内容をログに書き出すように設定を以下のように変更してください。(合わせて、先程した設定をもとに戻します)

  config.action_mailer.logger = Logger.new('log/production_mail.log', 'weekly')
  config.action_mailer.raise_delivery_errors = true

変更後、会員登録を実行し log/producton_mail.log にエラーが出ていればそのエラーでググるなど頑張ってみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/02 19:13

    コメントありがとうございます。試してみます。

    キャンセル

  • 2020/01/14 06:52

    ご指摘の通り検証しました。それでも会員登録はできましたのでやはりメールサーバーとの問題かと思われます。エラーログも個別で出せるようにはなりましたが、内容に変化はありませんでした。

    キャンセル

+1

本番用サーバにactive_jobのデフォルト設定(async adapter)を利用するのはやめた方が良いでしょう。
キューがオンメモリであるため、サーバの再起動が起きるとジョブの履歴が残らずに消えてしまいます。

そのため、sideqickや、delayed_jobなどを利用した本番用のgem導入と設定を併せて行うことをお勧めします。

ただ、async_adapterでもメールサーバには接続ができるはずなので、まずは原因をきりわけましょう。
internal server errorの前にerrorテンプレートをレンダリングしてることから、コントローラの処理あるいは、ネットワーク上のエラーどちらも考えられるので、メール送信のactionの該当処理に対してrescueでエラーを取得し、詳細なログを吐くようにしてみてください。

ネットワークの問題であれば、実際にホストのサーバにログインできるのであれば、ログインして、mail serverにcurlやtelnetで接続できるかどうか試してみることで、接続情報があっているかどうかの切り分けができます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/17 12:12

    コメントありがとうございます。
    試してみます。

    キャンセル

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

  • ただいまの回答率 89.89%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる