Pear Mail_Mime插入额外的换行符

时间:2014-04-08 06:29:22

标签: php pear

使用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中,这封邮件仍然是完全空的:

Mail unreadable

这是我的代码:

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>

...

然后邮件会打开就好了:

enter image description here

我已将Mail_Mime和Mail升级到最新版本,并且不知道可能导致这个奇怪的问题。请注意,整条消息中也插入了白色线条(因此每个HTML行都会插入额外的白线)。但这不会影响电子邮件的显示。

1 个答案:

答案 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”。

我不知道为什么这不是默认值,但我认为它会向某些早期版本向后兼容。