【问题标题】:php mail() function not sending mail when I use text/htmlphp mail() 函数在我使用 text/html 时不发送邮件
【发布时间】:2012-05-26 03:53:18
【问题描述】:

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

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

有什么建议吗?

pear 包也已启用。

【问题讨论】:

  • 我猜它可能被您的垃圾邮件过滤器捕获了。你的if (mail()) 部分应该没问题。只需仔细检查您要发送到的电子邮件地址。
  • @jimD 是的,我仔细检查了垃圾邮件文件夹,但那里也没有。
  • 是的,这就是我最初的想法,但是由于表单上的建议,我将其更改了回来,但仍然无法通过电子邮件

标签: php email


【解决方案1】:

上面写的代码没有任何问题(除了你两次调用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 的交付专员

【讨论】:

    【解决方案2】:

    我注意到你没有

    $headers .= 'To: ';
    

    这和它有关系吗?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果是这种情况,我是否不必在没有 text/html 的情况下做同样的事情,因为当我发送它而不发送它发送的 html 编辑时。
      • 你的意思是如果你的 php 文件中有 html,它不会通过?尝试将您的 html 代码放在不同的文件中。
      【解决方案4】:

      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)
      

      【讨论】:

        猜你喜欢
        • 2011-06-05
        • 1970-01-01
        • 2017-07-25
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 2012-02-05
        相关资源
        最近更新 更多