1

因此,当我在不修改标题信息的情况下执行此操作以发送它发送的 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

4 回答 4

2

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

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

垃圾邮件过滤是一个累积游戏。可能有多个小错误,没有一个将您标记为垃圾邮件,但累积地提示您的分数超过了限制。

在这种情况下,您发送的是一封没有 text/plain 组件的纯 HTML 电子邮件。这对你的分数来说是一个负分,这似乎是压垮骆驼的稻草。如果您从声誉不佳的共享主机发送邮件,您可能会得到更多的分数,并且您的 PHP 邮件设置可能会推送无效的返回路径或其他基于来源的错误,这也算在内。

您可以尝试根据http://krijnhoetmer.nl/stuff/php/html-plain-text-mail/发送包含 text/plain 和 text/html 的多部分

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

Gmail 将接受大多数邮件,但在接受后只是将其黑化,因此如果您使用它进行测试,您将不会得到太多反馈。

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

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

全面披露:我是 PostageApp 的交付能力专家

于 2012-05-25T19:53:18.973 回答
0

我注意到你没有

$headers .= 'To: ';

这可能与它有关吗?

于 2012-05-25T17:23:57.360 回答
0

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

于 2012-05-25T17:27:58.067 回答
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)
于 2012-05-25T17:43:00.583 回答