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

使用PHP Mailer/wp_Mail发送多部分电子邮件-并非所有客户端都显示电子邮件,php,wordpress,email,html-email,phpmailer,Php,Wordpress,Email,Html Email,Phpmailer,我在通过Wordpress函数发送多部分电子邮件时遇到一些问题,该函数基本上只是PHP Mailer的包装器 在OS X Mail.app中,邮件显示良好。在Thunderbird中,不会显示任何内容,而Google Mail会显示一个名为“noname”的附件,大小为1KB 我猜这与编码有关,因为我注意到边界根本没有显示在电子邮件的标题中,而它显示在我收到的其他电子邮件的标题中。此外,似乎存在某种内容传输编码不匹配 这些是标头的重要位: To: email@address.com Subjec

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

在OS X Mail.app中,邮件显示良好。在Thunderbird中,不会显示任何内容,而Google Mail会显示一个名为“noname”的附件,大小为1KB

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

这些是标头的重要位:

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--
在我的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正确显示邮件的事实并不符合这一点。

在$headers变量的每个标题行之后添加\r\n。
某些邮件系统存在问题\r-由于某种原因,它会中断某些邮件服务器上的邮件;如果仍然存在问题,请尝试忽略\r

您还可以将$headers作为数组传递,wp_-mail将为您处理。

旁白:您可以将UTF-8与7比特编码一起使用吗?!
$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 );