この問題を6時間把握しようとしています。しかし、意味をなすものは何もありません。シナリオは次のとおりです。適切にフォーマットされたHTML
テンプレートがあります。
$mail_body = '
<b>Message Num :</b> 769<br />
<b>Message Date :</b> 2013-04-08 09:03:21<br />
<b>Name :</b> John Doe<br />
<b>Phone :</b> 123456789<br />
<b>E-mail :</b> [email protected]<br />
<b>Message :</b> Here is the message info<br />
';
これが受信者のメールの配列です。
$recipients = array("[email protected]","[email protected]");
すべてが正常に表示され、電子メールを送信する準備ができています。
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "[email protected]";
$mail->FromName = "TEST";
$mail->WordWrap = 50;
foreach($recipients as $mail_add) {
$mail->AddAddress($mail_add);
}
$mail->IsHTML(true);
$mail->Subject = "TEST Subject";
$mail->Body = $mail_body;
if(!$mail->Send()) {
echo $mail->ErrorInfo;
} else {
echo "Mail sent...";
}
私がテストしてもすべて同じです。しかし、時々メールが送信されました。時々送信されませんでした。次のエラーを教えてください:The following SMTP Error: Data not accepted.
私が説明したことを願っています
サーバーは、設定する必要のある異なる送信者とユーザー名を許可していません:$mail->From
好む $mail->Username
PHPMailerと連携してAmazon SESを使用するAWSユーザーの場合、「from」メール送信者が検証済みの送信者でない場合にもこのエラーが表示されます。
確認済みの送信者を追加するには:
Amazon AWSコンソールにログインします。 https://console.aws.Amazon.com
利用可能なAWSアプリケーションのリストから「Amazon SES」を選択します
[確認済み送信者]で[メールアドレス]-> [新しいメールアドレスを確認]を選択します
その新しい送信者の電子メールに移動し、確認電子メールのリンクをクリックします。
そして、あなたはすべて設定されています。
興味深いことに、私はまったく同じ問題を抱えていました。私にとって問題は、接続がタイムアウトしたことでした。接続の詳細を確認できるように、$mail->SMTPDebug = 4;
私のphpmailerに(デフォルトの出力関数はechoであるため、デバッグのキャプチャ方法を調べてください)。
結果は次のとおりです。
SMTP -> get_lines(): $data was ""
SMTP -> get_lines(): $str is ""
SMTP -> get_lines(): $data is ""
SMTP -> get_lines(): timed-out (10 seconds)
SMTP -> FROM SERVER:
SMTP -> ERROR: DATA not accepted from server:
デフォルトのタイムアウトは10秒に設定されています。アプリがさらにサポートできる場合は、phpmailerに次の行を追加します。
$mail->Timeout = 20;
デバッグで動作するようにphpmailerを設定して、「SMTPエラー:データは受け入れられません」という一般的なメッセージの背後にある「実際の」エラーを確認します。
$email->SMTPDebug = true;
特定のサイズのメッセージでは、$ mail-> Bodyを介して設定するときにコンテンツを台無しにします。
小さいメッセージではうまく機能するが、大きいメッセージ(4〜6 kB以上)では機能しない場合は、テストできます。これが問題です。
これは$ mail-> Bodyの問題のようです。そのため、$ mail-> MsgHTML($ message)を介してHTML本文を手動で設定することにより、これを回避できます。そして、$ mail-> AltBodyでHTML以外の本文のみを追加することができます。
詳細、情報をお気軽にお寄せください。
私はただ使っていました
$mail->Body = $message;
また、いくつかの集計された形式では、PHPはエラーを返していました。
SMTPエラー:データは受け入れられません。SMTPサーバーエラー:DATA ENDコマンドが失敗しました詳細:このメッセージはスパムとして分類され、配信されない可能性がありますSMTPコード:550
$ mail-> Body = $ messageの後にこのコードを追加して修正しました:
$mail->MsgHTML = $message;
$mail->AltBody = $message;
ポートを26に設定してみてください。これにより、「データが受け入れられません」というメッセージに関する問題が修正されました。
最初に、デバッグをTRUEに設定することをお勧めします。
$ email-> SMTPDebug = true;
または、public $ SMTPDebug = false;の一時的な変更値。 PHPMailerクラス。
そして、ブラウザで完全なログを見ることができます。私にとっては1秒あたりのメールが多すぎる:
...
SMTP -> FROM SERVER:XXX.XX.XX.X Ok
SMTP -> get_lines(): $data was ""
SMTP -> get_lines(): $str is "XXX.XX.XX.X Requested action not taken: too many emails per second "
SMTP -> get_lines(): $data is "XXX.XX.XX.X Requested action not taken: too many emails per second "
SMTP -> FROM SERVER:XXX.XX.XX.X Requested action not taken: too many emails per second
SMTP -> ERROR: DATA command not accepted from server: 550 5.7.0 Requested action not taken: too many emails per second
...
したがって、私は正確な問題が何であるかを知りました。
このエラーはphpMailer + Amazon SESでヒットしていました。 phpMailerエラーはあまり説明的ではありません。
2: message: SERVER -> CLIENT: 554 Transaction failed: Expected ';', got "\"
1: message:
2: message: SMTP Error: data not accepted.
私にとっての問題は、コンテンツタイプとして次のものがあることだけでした。
$phpmailer->ContentType = 'text/html; charset=utf-8\r\n';
ただし、改行を入れてはいけません。
$phpmailer->ContentType = 'text/html; charset=utf-8';
...これは古いバージョンのレガシーコードであると思われます。したがって、基本的には、追加する$ phpmailerの設定ごとにトリプルチェックを行います-最小の詳細カウントです。
私の場合、問題はメールの内容にありました。コンテンツをHTMLのないシンプルなコンテンツに変更すると、うまくいきました。しかし、phpmailerを更新すると、すべてが解決しました。
Gmail SMTPサーバー経由でメールを送信しますが、Gmail送信制限に達すると、PHPMailerからこの正確なエラーを受け取ることがあります。
Gmailにアクセスして手動でメールを送信することで、同じことが起こっているかどうかを確認できます。この場合、送信制限に関するより有用なエラーメッセージが表示されます。
私の場合、cpanelには「メールIDを登録する」オプションがあり、電子メールアドレスを追加し、30分後に簡単なPHPメール機能で正常に動作します。
Office 365 SMTPゲートウェイを使用している場合、「SMTPエラー:データは受け入れられません。」は、メールボックスがいっぱいの場合に取得する応答です(メールボックスから送信している場合でも)。
メールボックスからいくつかのメッセージを削除してみてください。
同じ問題が発生していました。私のインスタンスでは、Exchangeサーバーがインターネット上のサーバーに電子メールを中継していたため、送信メールがタイムアウトになりました。そのサーバーは帯域幅のクォータを超えていました。どうやらphpメーラーにはいくつかのタイムアウトが組み込まれているため、実際のメッセージを表示するには長さが足りませんでした。