【问题标题】:PHP mail function, some clients aren't showing my mails as html?PHP邮件功能,一些客户没有将我的电子邮件显示为html?
【发布时间】:2012-09-13 15:36:23
【问题描述】:

我正在尝试使用 PHP 的 mail() 函数向我的网站成员发送电子邮件,

邮件是希伯来语的,我想发送一封 html 邮件,

这就是我发送它的方式

$mail_to = "Email@domain.com";
$message = "
<html>
some content here
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=windows-1255" . "\r\n";
$headers .= 'From: "MyWebsiteName" <support@domain.com>' . "\r\n";

$mail = mail($mail_to, $subject, $message, $headers );

它在 Gmail 或 Thunderbird 用户等客户端上运行良好,但我在其他一些不太出名但在我的国家仍然广泛使用的客户端中查看过它, 它只是向我展示了html源.. 我还要补充一点,我在那些运行良好的客户端中看到了其他邮件,因此它们支持 html 邮件。

我做错了什么?

编辑:

我查看了标题,很奇怪,这些是它们的标题:

MIME-version: 1.0
X-Mailer: aspNetEmail ver 4.0.0.6
Content-type: text/html; charset=UTF-8

Content-transfer-encoding: quoted-printable
SLNG_REVERSE_PATH: mail@domain.co.il
DT: 2
DB: 1
QueueCmd: 1
List-Unsubscribe: <mailto: mail@domain.co.il>
Original-recipient: rfc822;myemail@domain.com

这些是我的:

Message-id: <20120913143702.10413.qmail@www022.inter.co.il>
MIME-version: 1.0
Content-type: TEXT/PLAIN
Content-transfer-encoding: 8BIT
Original-recipient: rfc822;myemail@domain.com

Content-type:text/html;charset=windows-1255

好像他们出于某种原因添加了 TEXT/PLAIN 到我的,怎么会?

【问题讨论】:

  • 我会仔细查看其中一封在其他客户端中显示为 HTML 的电子邮件,特别是在标题处。里面有没有你不包括的东西?你是否以同样的方式格式化你的标题?
  • 这取决于客户。您需要查看其中一封电子邮件的完整 Internet 标头 - 只需 google 搜索“查看标头”和“电子邮件客户端名称”即可。
  • @andrewsi 我做了它来查看标题,这真的很奇怪,我编辑了我的问题,看看那里:)
  • 不要使用 php 内置的 mail() 函数。除了最基本的纯文本电子邮件之外,它不适合目的。我强烈建议改用 phpMailer 类。另请参阅我的回答:stackoverflow.com/questions/12301358/…
  • @Don - 它是否也删除了From: 行?还是您只是没有包括那行?

标签: php email


【解决方案1】:

修改后:

在 Content-type 标头之前有太多换行符,这使它成为电子邮件正文的一部分。一些客户端会检测到这种错误格式或识别 HTML 内容。其他人会假设 text/plain 或邮件服务器会自己添加 text/plain 标头,因为它认为您没有指定任何标头。

【讨论】:

    【解决方案2】:

    从我的 POV 看 - 没有。如果您阅读 HTML,那是因为客户端无法阅读 text/html 的内容类型。我的解决方案?创建一个多部分电子邮件并包括text/htmltext/plain。如果需要,请将您的电子邮件保存在网页中。当您发送 text/html 时,请照常发送。使用 text/plain,发送指向您存储电子邮件的网页的链接。

    另外,尝试像这样添加空格:

    Content-type: text/html; charset=windows-1255
    

    不确定它会改变什么,但谁知道呢。顺便说一句,连接在这里没有用。

    【讨论】:

    • 正如我所说,我收到了一些使用我谈到的这些客户端的 html 电子邮件,它们看起来很好,只有我的电子邮件没有作为 html 电子邮件传递,它认为这是一封纯文本电子邮件,出于某种原因
    • 我了解,但请尝试将两者都作为多部分电子邮件发送以查看结果 - 还要阅读邮件客户端中的标题。
    • 我查看了标题并编辑了我的问题,请看一下
    【解决方案3】:

    试试Content-type: text/html; charset="iso-8859-8"

    【讨论】:

      【解决方案4】:

      我强烈建议不要使用 PHP 的 mail() 函数。它不适合目的,除非您正在做一些非常基本的事情,例如将简单的纯文本消息发送到单个地址。

      对于稍微复杂一点的事情,我建议使用phpMailer class

      phpMailer 使得在 PHP 中处理复杂的电子邮件变得非常容易。它处理 HTML 消息、附件、多个收件人和许多其他功能,所有这些都在一个非常简单易用的 API 中。

      有关详细信息,另请参阅我之前写的另一个答案:Send attachments with PHP Mail()?

      【讨论】:

        【解决方案5】:

        因为是希伯来语,你可以试试:

        $headers .= "Content-Type: text/html; charset=utf-8\r\n";

        我在希腊邮件中使用它

        【讨论】:

          猜你喜欢
          • 2010-11-25
          • 1970-01-01
          • 2015-09-02
          • 1970-01-01
          • 2021-07-25
          相关资源
          最近更新 更多