【问题标题】:Indy 10 email attachment appears in bodyIndy 10 电子邮件附件出现在正文中
【发布时间】:2020-10-28 18:10:54
【问题描述】:

我已将现有的电子邮件发送程序从 Indy 9 升级到 Indy 10。这在我们的测试环境中运行良好,但在客户站点上,附件出现在电子邮件正文中。他们的 SMTP 服务器正在向电子邮件添加页脚,并在整个邮件周围添加 <html> ... </html> 标签,这导致了这个问题。 Indy 9 上的先前版本适用于该客户端。

以下是我们发送的电子邮件示例:

Content-Type: multipart/mixed; boundary="gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE"
MIME-Version: 1.0
Date: Thu, 1 Oct 2020 00:02:29 +0100
Message-Id: <20201001000278.SM78660@B-P-S0308-APP1>

This is a multi-part message in MIME format

--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Body text appears here.

--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE
Content-Type: application/octet-stream;
    name="PDA Audit.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="PDA Audit.pdf"

JVBERi0xLjINCjEgMCBvYmoNCjw8IC9UeXBlIC9DYXRhbG9nIA0KL1BhZ2VzIDMgMCBSIA0KL1Zp
ZXdlclByZWZlcmVuY2VzIDw8IA0KPj4NCj4+IA0KZW5kb2JqDQo1IDAgb2JqDQo8PCAvVHlwZSAv
<more lines here>

--gcJJK3Qk5C6XIV9FEwfRcK=_EH4Oq32hqE--

这有什么问题吗?

我注意到边界不再包含=_NextPart,所以我想知道服务器上的代码是否写得不好并且期待找到它。有没有其他人遇到过类似的问题?

【问题讨论】:

  • 我认为这封电子邮件没有任何问题。这是您发送到服务器的电子邮件,对吧?您能否展示您在查看时遇到问题的 server-modified 电子邮件的外观?它解析的电子邮件正文是什么样的?将 MIME 电子邮件加载到TIdMessage 时的注意事项,任何具有Content-Type 不是text/...multipart/... 或具有Content-Dispositionattachment 的MIME 部分都不应出现在正文中,它应该是TIdMessage.MessageParts 中的TIdAttachment 对象
  • 此外,Indy 9 和 10 都没有创建包含 =_NextPart 的 MIME 边界。 NextPart 文本不是官方 MIME 规范的一部分。边界的实际值是任意的并且是特定于实现的,它们只需要是唯一的并且可以与正文的其余部分区分开来。尽管规范确实 suggest 在边界中包括 =_(以避免与 quoted-printable 编码的正文冲突)。一些 MIME 库使用 =_NextPart(或其变体),Indy 仅使用 =_,其余的都是随机的。
  • server-modified 消息太大,无法完整发布,但这里有一个摘要Content-Type: text/html; charset="us-ascii"; boundary="PaZhQrP6jw7biezBU1O3mklOfBHSWxH=_1" MIME-Version: 1.0 Date: Thu, 8 Oct 2020 13:01:22 +0100 Message-ID: &lt;69dc89fb-5873-4f92-938f-4db82c6f541a@EXCH-HUB01.cc.xxxx.local&gt; Return-Path: Test-MaintenanceServices@xxxx.ac.uk X-Headers here &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"= &gt; &lt;/head&gt; &lt;body&gt; Original email here including content types &lt;p&gt;Footer appears here&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;
  • 因此服务器已将整个电子邮件转换为 html 而不仅仅是文本部分。
  • Delphi 7 附带的 Indy 9 副本肯定包含 =_NextPart。声明三个不同 MIME 边界的常量出现在 IdMessageCodeMIME.pas 中,并且都以 =_NextPart 开头。然后在 IdMessageClient.pas 中使用常量

标签: indy


【解决方案1】:

问题已解决。我们允许 Indy 决定 Content-Type,如果我们只发送带有附件的电子邮件,它就可以工作。如果之前的电子邮件只是文本,则 Content-Type 设置为 text/plain。然后发送带有附件的电子邮件时,Indy 认为 Content-Type 已经设置,因此没有更改它。设置Content-Type 正确解决了问题。

【讨论】:

    猜你喜欢
    • 2018-11-09
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多