AWSにてとあるサイトを運用しており、ユーザーがフォームで入力した内容を複数のアドレスに一括送信する、という部分でphpMailerを使用しております。
これまでは問題無く動作していたのですが、最近になって断続的にメールが届かない症状が続いております。
お手上げ状態で大変困っており、もし解決の糸口がありましたらご教授いただけませんでしょうか。
環境
・サーバ:Apache 2.4.25(AWS)
・PHPバージョン:5.6.30
・メールサーバー:ムームーメール
メール送信に使用しているコードは以下の通りです。
php
1require '/hogehoge/PHPMailer/PHPMailerAutoload.php'; 2 3 4$mail = new PHPMailer(); 5$mail->SMTPDebug = 2; 6//phpMailerのログをsyslogに出力 7$mail->Debugoutput = function($str, $level) {syslog(LOG_ERR, 'PHPMailer-'.date('Y-m-d H:i:s').':'.$str);}; 8$mail->isSMTP(); 9$mail->SMTPKeepAlive = true; 10$mail->Host = 'smtp.muumuu-mail.com'; 11$mail->SMTPAuth = true; 12$mail->Username = 'xxx@xxx.com'; 13$mail->Password = 'xxx'; 14$mail->SMTPSecure = 'ssl'; 15$mail->Port = '465'; 16$mail->CharSet = "UTF-8"; 17$mail->isHTML(true); 18$mail->Encoding = "base64"; 19$mail->setFrom(FROM_ADDRESS, '送信者'); 20$mail->ReturnPath =FROM_ADDRESS; 21 22$address_list = array('a@gmail.com', 'b@gmail.com', 'c@gmail.com', 'd@gmail.com'); 23 24foreach($address_list as $address){ 25 $mail->addAddress($address); 26 $mail->Subject = 'タイトル'; 27 $mail->Body = '本文'; 28 $mail->send(); 29 $mail->clearAddresses(); 30} 31 32$mail->SmtpClose();
正常に送信出来た場合は、以下のようなログが残りました。
May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:Connection: opening to ssl://smtp.muumuu-mail.com:465, timeout=300, options=array (#012) May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:Connection: opened May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:SERVER -> CLIENT: 220 smtp-proxy002.phy.lolipop.jp LOLIPOP-Fsecure#015 May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:CLIENT -> SERVER: EHLO example.com.me#015 May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:SERVER -> CLIENT: 250-smtp-proxy002.phy.lolipop.jp Hi smtp-proxy002.phy.lolipop.lan [172.19.44.43]#015#012250-8BITMIME#015#012250-AUTH PLAIN LOGIN#015#012250 SIZE 102400000#015 May 28 11:42:23 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:23:CLIENT -> SERVER: AUTH LOGIN#015
メール送信出来なかった場合、以下のようなログが残りました。
May 28 11:42:26 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:26:Connection: opening to ssl://smtp.muumuu-mail.com:465, timeout=300, options=array (#012) May 28 11:42:26 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:26:SMTP ERROR: Failed to connect to server: (0) May 28 11:42:26 ip-xxx-xxx-xxx-xxx httpd: PHPMailer-2019-05-28 11:42:26:SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
送信出来なかった場合、メールサーバーへの接続で失敗しているように見えます。
1時間あたり100~200件ほど送信しているため、ムームーメールの送信制限にひっかかっているのかと思い、サポートに問い合わせてみましたが制限はかかっていなかったとの事でした。
「$mail->SMTPDebug」のレベルを変えてみましたが、これ以上詳しいログは取得出来ず、なぜメールサーバーへの接続が失敗しているのかが特定出来ない状況です。
stackoverflow等でも調べてみましたが、ユーザー名・ホスト・ポート等を確認する等の手段が書かれておりましたが、送信成功しているメールもあるため、メールサーバーの設定情報が原因では無いと考えています。
お手上げ状態で大変困っているのですが、もし解決の糸口がありましたらご教授いただけませんでしょうか。
PHPMailerのログレベルを変更し、より詳しいログを取得した所、以下のようなログを得られました。
May 29 10:43:49 ip-xxx-xxx-xxx-xxx httpd: Connection: opening to ssl://smtp.muumuu-mail.com:465, timeout=300, options=array (#012) May 29 10:43:49 ip-xxx-xxx-xxx-xxx httpd: Connection failed. Error #2: stream_socket_client(): Failed to enable crypto [/xxx/PHPMailer/SMTP.php line 326] May 29 10:43:49 ip-xxx-xxx-xxx-xxx httpd: Connection failed. Error #2: stream_socket_client(): unable to connect to ssl://smtp.muumuu-mail.com:465 (Unknown error) [/xxx/PHPMailer/SMTP.php line 326] May 29 10:43:49 ip-xxx-xxx-xxx-xxx httpd: SMTP ERROR: Failed to connect to server: (0) May 29 10:43:49 ip-xxx-xxx-xxx-xxx httpd: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
「stream_socket_client(): Failed to enable crypto」
「stream_socket_client(): unable to connect to~」
の二つが、新たに得られた情報となります。
調べた所、PHP5.6からSSLコンテキストオプションでSSLサーバー証明書の検証がデフォルトでtrueになっており、その場合はローカルに証明書をもつ必要があるようですが、それをfalseにする事で解決されるというケースを見つけました。
・PHP5.6でSMTPのhostがsslの場合に注意!
https://qiita.com/satthi/items/1eaf1f5c2e1170f398da
・PHPMailer - SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
https://stackoverflow.com/questions/26827192/phpmailer-ssl3-get-server-certificatecertificate-verify-failed
そこで、PHPMailerに以下のオプションを追加いたしました。
php
1$mail->SMTPOptions = array( 2 'ssl' => array( 3 'verify_peer' => false, 4 'verify_peer_name' => false, 5 'allow_self_signed' => true 6 ) 7);
ですが、やはりエラー内容は変わらず、断続的にメール未送信が発生している状況です。
アドバイスいただいた「リトライ/再送信処理」を組み込みを進め、平行してムームーメールのサポートにも情報の提供をお願いしたいと思います。
回答3件
あなたの回答
tips
プレビュー