繁体   English   中英

如何知道php邮件是否失败

[英]how to know if php mail failed

我从php mail()发送邮件:如果发送失败到destinatio我想收到失败的消息。

$to = 'itsdfdsf@7sisters.in';
    $email_from = "info@7sisters.in";

    $full_name = 'XXXX';
    $from_mail = $full_name.'<'.$email_from.'>';



    $subject = "testing sender name";
    $message = "";
    $message .= '
            <p><strong>This is only a test mail. Please do not reply.</strong><br />
    ';
    $from = $from_mail;

    //$headers = "" .
    //         "Reply-To:" . $from . "\r\n" .
    //         "X-Mailer: PHP/" . phpversion();

    $headers = "From:" . $from_mail . "\r\n" .
               "Reply-To:" . $from_mail . "\r\n" .
               "X-Mailer: PHP/" . phpversion();


    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";        

    if(!mail($to,$subject,$message,$headers))
    {
        echo 'failed !!';
    }

但是,虽然$to mail不存在,但它没有显示failed !!

邮件方法只是发送邮件。 如果它没有收到任何错误(例如,没有找到服务器等),它将返回成功。 除非您根据退回的电子邮件等创建一些代码,否则您将无法知道邮件是否实际落在收件人的收件箱中。

检查mail的退货

如果邮件成功接受传递,则返回TRUE,否则返回FALSE。

重要的是要注意,仅仅因为邮件被接受传递,并不意味着邮件实际上将到达预定目的地。

虽然它返回true的事实可能意味着你的邮件程序正在接受邮件但是当它试图发送给任何人时失败...

您应该通过验证器运行$to来检查它的有效地址,如果不是,则抛出错误,不要依赖mail()过滤掉你已经知道错误的东西,或者可以轻松检查。

--update

然后查看@SeRPRo,但你想要做的是以编程方式进行测试的艰苦工作 - 发送电子邮件要求用户点击链接以验证它是真实的,而不是尝试查询SMTP服务器更容易和更可靠都有不同的行为(读:被打破到不同程度)。 另请注意,您的预期行为(代码明智)难以与垃圾邮件发送者区分开来,因此如果您避开验​​证电子邮件路由,请不要惊讶地发现它很难。

我想你想要的是检查真正的电子邮件,而不仅仅是有效的格式化电子邮件。 所以我建议你看看这个博客

但是,虽然$ to mail不存在,但它没有显示失败!!

实际上,邮件被传递到SMTP服务器的事实并不意味着它将被传递给最终用户。 在PHP中没有简单的方法来检查它是否已经交付。

在我的例子中,它有助于通过命令行参数“-f”设置返回路径,该参数可以在mail()的$ additional_parameters参数中传递。 所以我打电话

mail($to, $subject, $message, $headers, "-f address.where.i.want.the.bounces@xy.com");

...根据http://www.php.net/manual/en/function.mail.php上的一些评论,hosting-inviroments反应不同,有不同的限制(地址可能需要在同一个托管帐户中注册,或者在同一个域上,与heade中的“From:”相同...等等)

我收到反弹的页面(看似没有上述限制)在Domainfactory http://www.df.eu上发布

使用phpmailer发送电子邮件并设置$ mail-> AddCustomHeader('Return-path:bounce@mail.com'); 如果收件人邮件ID不存在或收件人未收到任何其他案件的电子邮件,则会在bounce@mail.com发送退回邮件。

您可以将自己视为测试它离开发件箱的一种方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM