14

自動化されたニュースレターを作成していますが、この問題に悩まされています。メールが送信されたかどうかを知る必要があります。これが私のコードです

 @$send = mail($emailRecipient, $subject, $message, $headers);

ifステートメントに追加しようとしましたが、ここでは機能しません。コードです。

if( @$send = mail($emailRecipient, $subject, $message, $headers)){
   //do something
}else{
  //do something
}
4

7 に答える 7

33
if(@mail($emailRecipient, $subject, $message, $headers))
{
  echo "Mail Sent Successfully";
}else{
  echo "Mail Not Sent";
}
于 2013-01-07T07:13:50.497 に答える
13

まず、組み込み関数の代わりにサードパーティのメール ライブラリ ( SwiftMailerPHPMailerZend_Mailmailなど) を使用してメールを送信することをお勧めします。メールの作成は、特にマルチパートおよび/または HTML 形式のメールを作成する場合、ほとんどの人が認識しているよりも複雑です。

第 2 に、メッセージが最初の (通常はローカルの) 電子メール サービスに正常に配信されたかどうかを確認するだけでなく、電子メールが送信されたかどうかを判断することはほとんど不可能です。これは、電子メールの本質的な仕組みによるものであり、できることはほとんどありません。

あなたができる (そして実際にすべき) 唯一のことは、システムがバウンスされた電子メールを正常な方法で処理することを確認することです. 例えば。メールアドレスが継続的にバウンスする場合は、アドレスの登録を解除することを検討してください。

于 2013-01-07T07:24:51.563 に答える
5

真実は次のとおりです。残念ながら、電子メールが送信されたか受信されたかを確実に検出することはできません。電子メールは信頼できる通信形式ではありません。

への呼び出しの結果は、mail()PHP が電子メールを MTA に送信できたことのみを示しますが、電子メールが実際に送信されたかどうか、または受信者が実際に受信したかどうかは示しません。

より信頼性が必要な場合は、 以外のものを使用する必要がありますmail()。私は一度も使用したことがありませんが、PHPMailer または別の SMTP ライブラリが MTA から返された情報を提供する場合があります。これにより、キューに入れられた配信について詳しく知ることができます。送信者の受信トレイ)、受信者が電子メールを受信したかどうかを知る方法はありません。

于 2013-01-07T07:21:40.690 に答える
0

これを試すこともできます

$send = mail($to,$subject,$msg);
if($send)
{
    echo "Your Account is Successfully Created. You must Activate your account.";
}
else
    echo "Failed to send";
于 2014-12-10T09:16:43.227 に答える