php - 检测是否发送了电子邮件

Kie*_*iel 14 php email

我正在建立一个自动通讯,我有点坚持这个问题.我需要知道电子邮件是否已发送.这是我的代码

 @$send = mail($emailRecipient, $subject, $message, $headers);
Run Code Online (Sandbox Code Playgroud)

我试图将它添加到if语句但它不起作用的是代码.

if( @$send = mail($emailRecipient, $subject, $message, $headers)){
   //do something
}else{
  //do something
}
Run Code Online (Sandbox Code Playgroud)

Day*_*aya 31

if(@mail($emailRecipient, $subject, $message, $headers))
{
  echo "Mail Sent Successfully";
}else{
  echo "Mail Not Sent";
}
Run Code Online (Sandbox Code Playgroud)

  • 接受这个答案就是为什么PHP有这么糟糕的声誉的一个很好的例子. (20认同)
  • 这只是检查本地邮件服务器(或php.ini中配置的SMTP)是否接受了传出电子邮件.邮件服务器将尝试将电子邮件发送到收件人的邮件服务器,但这是在PHP的mail()返回后完成的,如其他答案中所述. (3认同)

Bre*_*ker 13

首先,我建议使用第三方邮件库(SwiftMailer,PHPMailer,Zend_Mail ...)来发送电子邮件而不是内置mail函数.编写邮件比大多数人意识到的要复杂得多,特别是如果你想做多部分和/或HTML格式的电子邮件.

其次,除了检查消息是否成功传递到第一个(通常是本地的)电子邮件服务之外,几乎不可能确定是否发送了电子邮件.这是由于电子邮件固有的工作方式,并且几乎无法完成.

你能做(并且真的应该)做的唯一事情是确保你的系统以理智的方式处理退回的电子邮件.例如.如果电子邮件地址不断反弹,请考虑取消订阅该地址.


jmk*_*yes 5

这是事实:遗憾的是,您无法可靠地检测是否发送或接收了电子邮件:电子邮件不是一种可靠的通信形式.

调用的结果mail()仅表示PHP能够将电子邮件发送到MTA,但这不会指示是否实际发送了电子邮件或收件人是否实际收到了电子邮件.

如果你想要更高的可靠性,你必须使用一些其他的mail().虽然我从未使用它,但PHPMailer或其他SMTP库可能会向您提供来自MTA的返回信息,这将告诉您有关排队传递的更多信息,但不会轮询退回邮件(可能会也可能不会传递给发件人的收件箱)您无法确定收件人是否收到了电子邮件.