怎么知道使用php发送电子邮件失败了

时间:2010-10-12 11:48:58

标签: php

 $subjt    = $subject;
 $message  = $message;
 $toinfo  .= $snteadd[$i];
 $headers  = "MIME-Version: 1.0 \r\n";
 $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
 $headers .= "From: <$fromemailid>\r\n";
 $headers .= "Cc: <$sendCC>\r\n";
 $headers .= "Bcc: <$sendBCC>\r\n"; 
 $headers .= "Return-Path: <$fromemailid>\r\n"; 
 $headers .= "Errors-To: <$fromemailid>\r\n";
 $headers .= "X-Mailer: PHP 4.x". phpversion()
 @mail($snteadd[$i], $subjt, $message, $headers);

6 个答案:

答案 0 :(得分:3)

返回值

  

如果邮件是,则返回TRUE   成功接受交付,   否则就错了。

     

重要的是要注意这一点   因为邮件被接受了   送货,这并不意味着邮件   实际上会达到目的   目的地。

然后你可以这样做:

if (@mail($snteadd[$i], $subjt, $message, $headers))
{
    echo 'delivered to smtp';
}
else
{
    echo 'not delivered to smtp';
}

如果您希望检查邮件到达您的发件人,那么可能更好的解决方案是使用唯一参数链接到您的脚本以确定邮件ID,并通过邮件文本获取信息以单击链接。

答案 1 :(得分:1)

mail函数在成功时返回true或在失败时返回false

if (!@mail($snteadd[$i], $subjt, $message, $headers))
{
    // It failed...

请参阅http://php.net/manual/en/function.mail.php

答案 2 :(得分:1)

检查mail函数的返回值,该函数在失败时返回false

if(@mail($snteadd[$i], $subjt, $message, $headers) === false) {
  // mail failed.
}

答案 3 :(得分:1)

为了扩展之前的答案,@用于显式地禁止显示以下函数的错误消息 - 所以您的代码所做的是发送电子邮件,如果失败则不要告诉我。 ..如果你要么a)不关心或b)检查它是否有效 - 例如,如其他地方所示的if块

答案 4 :(得分:0)

虽然成功时mail()函数返回true,失败时返回false,但它报告的状态仅表示“本地服务器接受传递”,绝对“已传递”。

用于大多数电子邮件的SMTP协议保证 nothing 。它应该尝试发送电子邮件,有时候;再次,不能保证它将在十分钟,明天或本月(它发生)。更糟糕的是,没有可靠的方法来判断您发送的邮件是否已实际发送给目标收件人。

即使电子邮件已发送给收件人,它也可能会被拖放到垃圾邮件箱中,用户将无法看到它。

换句话说,你唯一可以通过电子邮件确定的是你是否发送过它;除此之外的任何事(see also this for other possible pitfalls

答案 5 :(得分:0)

如果其他人想知道为什么他们设置的“Return-Path”标头没有被尊重,许多php设置用其他东西替换该标头,通常是服务器的默认电子邮件地址(例如,@ webserver .domain.com)。以这种方式使用(经常被忽略的)第五个参数$ additional_parameters:

mail($toMail, $subject, $message, $other_headers, "-fyour_return_path_email_address@whatever.com")

your_return_path_email_address@whatever.com是您希望返回路径的电子邮件。在此之前的-f部分使“信封发件人”成为电子邮件地址。