POSTFIX / sendmail突然添加额外的换行符

时间:2012-08-03 21:52:25

标签: php email sendmail postfix-mta line-endings

上周末,我们的MTA(POSTFIX)突然开始在我们的消息边界上添加换行符。 我们有几个PHP模板,用于定义多部分/备用消息并定义标头。 这是PHP邮件程序格式,它在星期五工作,然后在星期一突然停止。

$headers = "From: name <our@example.com>\r\n" .
   "Reply-To: name <our@example.com>\r\n" .
   "MIME-Version: 1.0\r\n" .
   "Content-Type: multipart/alternative; boundary=\"09127kjhd821\"";

$txt = "\r\n\r\n--09127kjhd821\r\n" .
   "Content-Type: text/plain; charset=UTF-8\r\n" .
   "Content-Transfer-Encoding: quoted-printable\r\n\r\n" .
   "Text Message";

$html = "\r\n\r\n--09127kjhd821\r\n".
   "Content-Type: text/html; charset=UTF-8\r\n" .
   "Content-Transfer-Encoding: base64\r\n\r\n" .
   chunk_split( base64_encode( "HTML Message") );

$body = $txt . $html . "\r\n\r\n--09127kjhd821--";

mail(
   "someone@example.com",
   "=?UTF-8?B?" . base64_encode( "Subject" ) . "?=",
   $body,
   $headers
);

将原始邮件与破碎的邮件进行比较,我看到以下内容 破:

Date: Fri,  3 Aug 2012 16:52:39 -0400 (EDT)





--09127kjhd821

Content-Type: text/plain; charset=UTF-8

Content-Transfer-Encoding: quoted-printable

原创(工作)

Date: Tue, 31 Jul 2012 12:36:45 -0400 (EDT)



--09127kjhd821
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

正如你所看到的那样,每个\ r和\ n的换行几乎翻了一番,没有任何改变我认识会造成这种情况。

非常感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:2)

我唯一能想到的是POSTFIX和PHP将LF转换为CRLF的问题,所以当在消息体中为边界和标题定义CRLF时,它将被转换为CRCRLF。 但是保存消息源只会在十六进制编辑器中显示为CRLF,这可能是我使用的编辑器中的转换或电子邮件客户端下载过程。

我仍然不明白为什么它突然改变,因为之前工作正常。 我能想到的唯一区别可能是由于脚本行结尾可能已从CRLF更改为LF导致转换发生,从而破坏了正文中包含CRLF的电子邮件。

我最终通过将php.ini中的sendmail_path更改为

来解决了这个问题
sendmail_path="/usr/bin/dos2unix|/usr/sbin/sendmail -t -i"