質問 > 管理機能 > 受注完了メール送信の失敗時にエラーログをメール送信したい |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
PRIA |
投稿日時: 2024/4/17 10:43
対応状況: −−−
|
常連 登録日: 2020/8/24 居住地: 投稿: 34 |
受注完了メール送信の失敗時にエラーログをメール送信したい [EC-CUBE] 4.0.4
[レンタルサーバ] さくらサーバー [OS] WIN10 [PHP] 7.4.33 [データベース] MySQL5.7 [対象プラグイン] エラーのメール通知、履歴確認プラグイン 先日、二日続けて受注完了メールが届かない問題が発生し、 ログを確認したところ、いずれも受注日時の1秒後に、以下のエラーログが残っていました。 Exception occurred while flushing email queue: Expected response code 250 but got code "451" (※前後は省略しています) 今のところ再発はしていないのですが、いつ発生するか分からないため、何らかの対策をしたいと考えております。 受注完了メールが届かなかった場合にエラーログのメールを任意のアドレスに送信することが最も望ましいですが、 そのためには、リクエストを送ってレスポンスから判定する処理が必要かと思いますので、MailService.php等に条件を追加しようとしましたが具体的な方法が分からず、 代替案として、エラーログを参照し、上記エラーの文字列を含むものがヒットすれば、通知メールを送信してはどうかと考えましたが、そもそもエラーログを参照する方法が分かりませんでした。 $errorLog = $this->mailer->getLastErrorMessage(); という感じで取れるかなと思ったのですが、当然ダメでした。 そもそもエラーログは、/rc/var/log/prodに日付別で格納されており、どのデータを参照するのかもよく分かりません。 何か良い方法はありますでしょうか? ご教示いただけますと幸いです。 よろしくお願いいたします。 |
h_tanaka |
投稿日時: 2024/4/17 10:52
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1852 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい メールサーバーのタイムアウトでそのようなエラーが発生するようです。
https://github.com/symfony/symfony/issues/45586 エラーが出力されているのであれば、その出力箇所がエラーログには出力されていると思うので、その箇所に処理を追加するのが良いと思います。 エラーログは、次のように仕分けられています。 admin- 管理画面 front- フロント画面 site- サイト(admin+front)
|
mcontact |
投稿日時: 2024/4/17 10:52
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1536 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい > そもそもエラーログは、/rc/var/log/prodに日付別で格納されており、どのデータを参照するのかもよく分かりません。
EC-CUBEには、日付毎のエラーログファイル以外に同じフォルダにsite.logファイルに纏められているはずですので、そちらを確認してみてください。
|
mcontact |
投稿日時: 2024/4/17 11:03
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1536 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい > 受注完了メールが届かなかった場合にエラーログのメールを任意のアドレスに送信することが最も望ましいですが、
> そのためには、リクエストを送ってレスポンスから判定する処理が必要かと思いますので、MailService.php等に条件を追加しようとしましたが具体的な方法が分からず、 > 代替案として、エラーログを参照し、上記エラーの文字列を含むものがヒットすれば、通知メールを送信してはどうかと考えましたが、そもそもエラーログを参照する方法が分かりませんでした。 受注完了メールが届かなかったとの事で、エラーを検知してメールを送信したい様ですが、同じサーバ内でエラーを検知しても検知メールを同じ理由で送れない事もあるのではないでしょうか? レンタルサーバをご利用の様なので、難しいようですが一般的にサーバ管理・エラー監視は、サーバ監視ソフトなどを利用するのが一般的です。 有名ソフトとしては、zabbixやdatadogなどが有名です。
|
PRIA |
投稿日時: 2024/4/17 11:35
対応状況: −−−
|
常連 登録日: 2020/8/24 居住地: 投稿: 34 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい h_tanaka様
早速のご連絡、ありがとうございます。 私もそのページには辿り着きまして メールサーバーのタイムアウトが原因であることも、レスの内容から何となく分かりましたが、メールサーバーのタイムアウト時間を延ばす設定を検索しても情報が見つけられず、最終的に抜本解決は断念いたしました。 セッションのタイムアウトであれば、.envファイルで設定できるのですが……。 エラーログの詳細は以下になります。 [2024-04-10 12:42:06] app.ERROR [N/A] [0224b0a] [1964] [Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener:onTerminate:64] - Exception occurred while flushing email queue: Expected response code 250 but got code "451", with message "451 4.1.8 Domain of sender address アカウント名@ドメイン名.sakura.ne.jp does not resolve " [] [POST, /rc/shopping/checkout, IP, https://ドメイン名.sakura.ne.jp/rc/shopping/confirm, Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36] この場合、Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener:onTerminateの64行目がエラーログを吐いているところでしょうか? |
PRIA |
投稿日時: 2024/4/17 11:42
対応状況: −−−
|
常連 登録日: 2020/8/24 居住地: 投稿: 34 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい mcontact様
ありがとうございます。 >EC-CUBEには、日付毎のエラーログファイル以外に同じフォルダにsite.logファイルに纏められているはずですので、そちらを確認してみてください。 site.logファイルにはエラーログは記録されておりませんので、そのファイルを参照してもキャッチできないようでした。 |
h_tanaka |
投稿日時: 2024/4/17 12:18
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1852 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい エラーログからはわからないですね。。
注文受付メールを送信している処理は、次のメソッドになります。 src/Eccube/Service/MailService.php public function sendOrderMail() プラグインでオーバーライドされている可能性もあるので、 sendOrderMail で grep検索してみてください。
|
mcontact |
投稿日時: 2024/4/17 13:02
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1536 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい 下記のログ出力を行うメソッドで、ログレベルやメッセージなどでキャッチすれば、エラー発生時に何かしらのアクションは起こせるはずです。
https://github.com/EC-CUBE/ec-cube/blob/4.3/src/Eccube/Log/Logger.php#L54-L70
|
PRIA |
投稿日時: 2024/4/17 14:15
対応状況: −−−
|
常連 登録日: 2020/8/24 居住地: 投稿: 34 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい お二人ともありがとうございます。
とても参考になる情報で大変ありがたく思います。 mcontact様からいただいた情報から ログをメールに送信できないか試してみようと思います。 今後とも、何卒よろしくお願いいたします。 |
PRIA |
投稿日時: 2024/4/18 9:33
対応状況: −−−
|
常連 登録日: 2020/8/24 居住地: 投稿: 34 |
Re: 受注完了メール送信の失敗時にエラーログをメール送信したい 実際に以下のようなコードを書いて試してみましたが、
[PROCESS START]といった、admin.INFOのエラー本文(タイムスタンプやPathなし)しか取得できず、肝心のapp.ERRORのデータが含まれていませんでした。 public function log($level, $message, array $context = []) { if ($this->context->isAdmin()) { $this->adminLogger->log($level, $message, $context); } elseif ($this->context->isFront()) { $this->frontLogger->log($level, $message, $context); } else { $this->logger->log($level, $message, $context); } //メールを送信する $this->sendNotification($message); } protected function sendNotification($message) { $to_email = "任意のメールアドレス"; $subject = "ログ通知"; $body = "ログ内容:\n$message"; $headers = "From: 任意のメールアドレス\r\n"; $headers .= "Reply-To: 任意のメールアドレス\r\n"; $headers .= "Content-Type: text/plain; charset=utf-8\r\n"; mail($to_email, $subject, $body, $headers); } app.ERRORをタイムスタンプ付きで取得するには、どうしたらよいでしょうか? |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |