使用PHP Mailer / wp_mail发送多部分电子邮件 - 并非所有客户端都显示电子邮件

时间:2014-03-24 16:07:19

标签: php wordpress email html-email phpmailer

通过Wordpress函数wp_mail发送多部分电子邮件时遇到一些问题,这基本上只是PHP Mailer的包装器。

在OS X Mail.app中,Mail显示正常。在Thunderbird中,没有显示任何内容,而Google Mail会显示一个名为“noname'大小为1 KB。

我的猜测是它与编码有关,因为我注意到边界根本没有显示在电子邮件的标题中,而它出现在其他电子邮件的标题中我已收到。此外,似乎存在某种内容传输编码不匹配?

这些是标题的重要部分:

To: email@address.com
Subject: Testsubject
X-PHP-Originating-Script: 10029:class-phpmailer.php
Date: Mon, 24 Mar 2014 15:52:59 +0000
From: WordPress <wordpress@example.com>
Message-ID: <ab7dd25d45c2d5be71df1e592bb0ab96@www.example.com>
X-Priority: 3
X-Mailer: PHPMailer 5.2.4 (http://code.google.com/a/apache-extras.org/p/phpmailer/)
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: multipart/alternative; charset=UTF-8

--1234567890
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Text Plain

--1234567890
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<b>HTML E-Mail</b>

--1234567890--

在其他正确显示的HTML电子邮件中,我可以清楚地从标题中读取边界。此外,Content-Transfer-Encoding也不同。

Content-Type: multipart/alternative; boundary="--==_mimepart_532c53995fed2_5f733fb4b5966cd0158292"; charset="UTF-8"
Content-Transfer-Encoding: 7bit

在我的PHP脚本中,邮件编译如下:

$to = 'email@address.com';
$subject = 'Testsubject';

$headers = 'Content-Type: multipart/alternative; charset=UTF-8; boundary="1234567890"' . "\r\n\r\n";

$message = '--1234567890' . "\r\n";
$message .= 'Content-Type: text/plain; charset=UTF-8' . "\r\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
$message .= 'Text Plain' . "\r\n\r\n";

$message .= '--1234567890' . "\r\n";
$message .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
$message .= '<b>HTML E-Mail</b>' . "\r\n\r\n";
$message .= '--1234567890--';

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

你看到有什么打击你吗?为什么Thunderbird / Google Mail中根本没有显示电子邮件正文?

目前我认为可能是服务器配置错误或类似的事情,但Mail.app正确显示邮件的事实并不适合。

2 个答案:

答案 0 :(得分:0)

添加&#34; \ r \ n&#34;在$ headers var中的每个标题行之后。 某些邮件系统存在&#34; \ r&#34; - 由于某种原因,它打破了某些邮件服务器上的消息;如果您仍有问题,请尝试省略&#34; \ r&#34; &#39;第

答案 1 :(得分:0)

您也可以将$headers作为数组传递,wp_mail将为您处理。