【问题标题】:POSTFIX/sendmail suddenly adding extra line breaksPOSTFIX/sendmail 突然添加了额外的换行符
【发布时间】:2012-08-03 21:52:25
【问题描述】:

在周末,我们的 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 的换行符几乎翻了一番,据我所知,没有任何改变会导致这种情况。

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

【问题讨论】:

  • 首先,您是否使用相同版本的同一邮件客户端来查看这两条消息?
  • 我们有多个客户抱怨。更重要的是,我们的 gmail 似乎可以很好地显示它们,hotmail 和我的手机也是如此。而其他 gmail 客户端会看到 MIME 格式。我正在使用我们的一个客户收件箱查看邮件,并与他们的服务器管理员交谈,看看这是否可能是由垃圾邮件过滤器在处理邮件后引起的,然后我们也开始收到其他人的投诉。 编辑我还发布了电子邮件源文件正文,而不是客户端解析的正文。

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


【解决方案1】:

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

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

我最终解决了这个问题,将 php.ini 中的 sendmail_path 更改为

sendmail_path="/usr/bin/dos2unix|/usr/sbin/sendmail -t -i"

【讨论】:

  • 我实际上确定了这个问题。我们的防火墙有一个电子邮件过滤器,显然它正在编辑邮件正文并正确格式化它。因此,我们的防火墙的电子邮件过滤器已解决了上述问题。电子邮件过滤器订阅在相关日期过期,导致我们发送的所有电子邮件格式错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2021-06-24
  • 2014-04-13
  • 2011-06-08
相关资源
最近更新 更多