php mail()函数在我使用text / html时不发送邮件

时间:2012-05-25 17:14:21

标签: php email

因此,当我执行此操作而不修改标题信息以发送html类型的电子邮件时,它会发送,但是当我发送它时它是一个html电子邮件,它永远不会被发送。

这是代码:

<?php
    $to = "someone@gmail.com";
    $subject = "Order Confimation - mywebsite.com";
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= "From: <contact@mywebsite.com>";
    $message = "
        <!DOCTYPE html>
        <html lang='en-us'>
            <head>
                <meta charset='utf-8'>
                <title>Order Confirmation</title>
                <style type='text/css'>
                    //style information
                </style>
            </head>
            <body>
                <div class='box'>
                    <h1 class='right'>Thanks!</h1>
                    //Blah blah blah
                </div>
            </body>
        </html>
    ";

    mail($to, $subject, $message, $headers);

    if (mail($to, $subject, $message, $headers)) {
        echo "<p class='hide'>E-mail Sent</p>";
    } else {
        echo "<p class='hide'>Problem</p>";
    }           
?>

它返回发送的电子邮件,但电子邮件永远不会进入收件箱

有什么建议吗?

还启用了梨包。

4 个答案:

答案 0 :(得分:2)

上面写的代码没有任何问题(除了你调用mail()两次 - 一次在错误检查循环之外,一次在'if'之内 - 所以你发送了2封电子邮件)

快速测试可以很好地传送到Google Apps电子邮件地址,因此没有任何关于特定应该导致问题的代码。

垃圾邮件过滤是一种累积游戏。可能存在多个小错误,其中任何一个都不会标记为垃圾邮件,但会累积超出限制的分数。

在这种情况下,您只发送一个没有text / plain组件的HTML电子邮件。这是对你的分数的负面影响,似乎是打破骆驼背部的吸管。如果您从名声不佳的共享主机发送,您可能会得到更多的反对,并且您的PHP邮件设置可能会推送无效的返回路径或其他基于原因的错误,这也是一个错误。

您可以尝试按http://krijnhoetmer.nl/stuff/php/html-plain-text-mail/

发送包含text / plain和text / html的multipart

如果这不起作用,那么如果您发布成功明文电子邮件的完整标题,那么我可能会看到您是否有其他指标。

Gmail会接受大多数邮件,但在接受后只是黑洞,所以如果您使用它进行测试,则不会获得太多反馈。

电子邮件是一个棘手的游戏,如果您需要为应用程序的成功而获得交付,您可能需要考虑使用第三方服务:

这些服务的设计目的是从应用程序发送事件驱动的电子邮件,并处理ISP交付端的所有混乱。

完全披露:我是PostageApp的Deliverability人员

答案 1 :(得分:0)

我注意到你没有

$headers .= 'To: ';

这可能与它有关吗?

答案 2 :(得分:0)

如果您在php中使用邮件功能,我认为您需要包含外发邮件的SMTP设置。因此从技术上讲,您的邮件将被报告为已发送但不会通过邮件提供商。 (我知道你在使用邮件功能时需要在java中这样做。)

答案 3 :(得分:0)

mail函数返回true,所以你应该说:

// mail() function return 0 if all right, so compare this with 0
if (mail($to, $subject, $message, $headers)) {
    echo "E-mail Sent";
} else {
    echo "Problem";
}  

不是:

if (mail($to, $subject, $message, $headers)==0)