PHP 7.0では最新のPHPMailer 5.2.24(問題は以前のバージョンと同じです)を使用しています。PHPmailer交換する - 30秒後に "DATA ENDコマンドが失敗しました"(ただしタイムアウトはありません)
Exchange 2016でSMTP経由でメールを送信します。メールの約95%は期待どおりに機能しますが、Exchangeから最終DATA ENDコマンドまで250回の応答が30秒以上続くと、ストリームは中止するようです。
PHPMailerのタイムアウトは300に設定されており、ログにはタイムアウトが問題ではないことが確認できます。
実際、すべてのメールは、私が(30件のうち約30件を確認して)確認できれば届きます。
$this->mailer->isSMTP();
$this->mailer->Timeout = 300;
$this->mailer->Host = 'mail.myhost.com';
$this->mailer->SMTPAuth = true;
$this->mailer->Username = 'Domain\\Username';
$this->mailer->Password = '*****';
$this->mailer->SMTPSecure = 'tls';
$this->mailer->Port = 587;
低レベルのログの例:(私は関数fgets()がfalseを返すことを示すとstream_get_meta_dataを表示するclass.smtp.phpの)(GET_LINES内部2つのカスタムデバッグ出力を追加())
2017-08-23 13:46:05 Level 1; message: CLIENT -> SERVER: .
2017-08-23 13:46:35 Level 4; message: SMTP -> get_lines(): $data is ""
2017-08-23 13:46:35 Level 4; message: SMTP -> get_lines(): $str === false
2017-08-23 13:46:35 Level 4; message: SMTP -> [timed_out => false, blocked => 1, eof => 1, stream_type => tcp_socket/ssl, mode => r+, unread_bytes => 0, seekable => false]
2017-08-23 13:46:35 Level 2; message: SERVER -> CLIENT:
2017-08-23 13:46:35 Level 1; message: SMTP ERROR: DATA END command failed:
2017-08-23 23:25:02 Level 1; message: CLIENT -> SERVER: .
2017-08-23 23:25:28 Level 4; message: SMTP -> get_lines(): $data is ""
2017-08-23 23:25:28 Level 4; message: SMTP -> get_lines(): $str is "250 2.6.0 <...> [InternalId=10677288697896, Hostname=myhost] 32443 bytes in 26.353, 1,202 KB/sec Queued mail for delivery"
2017-08-23 23:25:28 Level 2; message: SERVER -> CLIENT: 250 2.6.0 <...> [InternalId=10677288697896, Hostname=myhost] 32443 bytes in 26.353, 1,202 KB/sec Queued mail for delivery
2017-08-23 23:25:28 Level 1; message: CLIENT -> SERVER: QUIT
だから何でし
:他のケースでは応答で速く30代よりも、それは次のようになります。
は、ストリームのタイムアウトではなく、PHPランタイムのタイムアウトではなく、正確に30秒(実行後30秒後、スクリプトの開始以降ではない)に失敗します。 (ここに例外は投げられません、私はこれを確認するために元のPHPMailerコードのfgets()を削除しました)
スクリプトはmax_execution_timeなしで実行されています。
私のExchange管理者は、これを引き起こす原因は何もわからないし、ストリームがどこで壊れているか知っていないとしても、まずはポイントがありません。
その他のアイデア他に何が確認できるのですか、これを引き起こす原因は何ですか?
おそらくPHPのバグです。 https://github.com/PHPMailer/PHPMailer/issues/604を参照してください。 – Synchro
私の問題は、リンクされたバグの反対によく似ています - 私の問題は、タイムアウトが機能していないということではありません(動作しています。それは30秒の制限の前にタイムアウトに走った)。私の問題は、ストリームが何とか30秒後に途切れて、300秒のタイムアウトまで開いていないということです。 – SunDawn