【问题标题】:Content stripped from email on php mail()从 php mail() 上的电子邮件中删除的内容
【发布时间】:2016-04-29 12:19:52
【问题描述】:

我有一封电子邮件要发送(整个电子邮件都在标题中)。实际上,电子邮件正在发送。但是当它到达目的地时,内容已被删除。如果我发送完全相同的电子邮件,由不同服务器的相同代码构建,那么一切都很好。

当我使用nl2br(htmlspecialchars($headers, ENT_QUOTES)) 打印出来时,我得到的是:

From: kittsil@example.com
Reply-to: kittsil@example.com
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="cccf6094979eaede770a2a2e88fc83e9"
Content-Transfer-Encoding: 7bit
This is a MIME encoded message.
--cccf6094979eaede770a2a2e88fc83e9
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
You are not being awesome....
--cccf6094979eaede770a2a2e88fc83e9--

邮件投递的时候body是空的,我在Gmail的“show original”里看的时候还是一样的,但是里面没有内容。

我正在使用 postfix 和 OpenDKIM,但我已禁用它们中的每一个,甚至切换回 sendmail,并且这些电子邮件都没有正文。我正在为此扯掉我的头发。

【问题讨论】:

  • 您是否检查过您的邮件日志中的 postfix 或 sendmail?里面有什么有趣的吗?
  • 您的邮件正文中缺少空白行。参见example here:“每个部分都以封装边界开始,然后包含由标题区域、空白行和正文区域组成的正文部分。”
  • @Jason 我找不到任何相关的东西;只是与 Google 邮件服务器的连接信息。
  • @GeraldSchneider 你几乎肯定是对的。但是,PHP mail() 不再允许在标题中出现空行 (stackoverflow.com/questions/30887610/…)。你有什么建议吗?
  • 好吧,那你就得用好旧的内容了。

标签: php email


【解决方案1】:

您的邮件正文中缺少空行。

引用from the RFC

每个部分都以封装边界开始,然后包含正文部分,由标题区、空行和正文区组成。

(强调我的)

添加正确的空行,它就可以工作了:

标题:

From: kittsil@example.com
Reply-to: kittsil@example.com
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="cccf6094979eaede770a2a2e88fc83e9"
Content-Transfer-Encoding: 7bit

正文:

This is a MIME encoded message.

--cccf6094979eaede770a2a2e88fc83e9
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

You are not being awesome....
--cccf6094979eaede770a2a2e88fc83e9--

【讨论】:

  • 就是这样。那是一个缩小的例子;我们的图书馆(一年多前)根据这个答案调整了处理附件:stackoverflow.com/a/12313090。我已将其更改为拆分标题和正文,并且它可以正常工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多