使用Pear的Mail_Mime类发送邮件时,我遇到了一个非常奇怪的问题。发送邮件时,在这些行之间插入空行(在边界和内容传输编码和内容类型之间):
--=_976a455a037a6f66f542025a19c22f9f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=ISO-8859-1
Hello world
--=_976a455a037a6f66f542025a19c22f9f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=ISO-8859-1
<html>
<head>
...
这会导致大多数电子邮件客户端无法读取邮件。例如,在Thunderbird中,这封邮件仍然是完全空的:
这是我的代码:
require_once 'Mail.php';
require_once 'Mail/mime.php';
$to = 'my@example.com';
$headers = array(
'From' => 'noreply@example.com',
'Subject' => 'Test mail',
);
$html =
'<html>
<head>
<style type="text/css">
body{font-family: Arial, sans-serif;}
</style>
</head>
<body>
<h1>Test mail</h1>
<p>Hello world</p>
</body>
</html>';
$text = "Hello world";
$mime = new Mail_mime();
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($headers);
$mail =& Mail::factory('mail');
$mail->send($to, $hdrs, $body);
我发现如果我手动删除白色指针,那就可以了。所以我拿出一些这样的白色线条:
--=_976a455a037a6f66f542025a19c22f9f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=ISO-8859-1
Hello world
--=_976a455a037a6f66f542025a19c22f9f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=ISO-8859-1
<html>
<head>
...
然后邮件会打开就好了:
我已将Mail_Mime和Mail升级到最新版本,并且不知道可能导致这个奇怪的问题。请注意,整条消息中也插入了白色线条(因此每个HTML行都会插入额外的白线)。但这不会影响电子邮件的显示。
答案 0 :(得分:2)
您必须正确initialize Mail_Mime
:
$mime = new \Mail_mime(
array(
'eol' => "\n",
'head_charset' => 'utf-8',
'text_charset' => 'utf-8',
'html_charset' => 'utf-8',
)
);
有点在the manual中解释:
通常,没有必要设置参数。但是,如果要使用Mail发送生成的MIME邮件,则必须将eol设置为“\ n”。
我不知道为什么这不是默认值,但我认为它会向某些早期版本向后兼容。