Mailkit - 没有附件或 html body 收到从苹果邮件发送的邮件时
Mailkit - no attachments or html body when receiving message sent from apple mail
我一直在使用 Mailkit 库来接收电子邮件,到目前为止效果很好。但是,我们发现 Mac 上通过邮件应用程序发送的邮件存在问题。例如,我们发送的带有 pdf 附件和 html-formatted body 的消息正在作为 object 接收(通过 IMailFolder.GetMessage),没有任何附件,只有 HtmlBody 为 null (仅接收到 TextBody)
我附上来自 Web 电子邮件客户端的此邮件的源代码(没有一些个人信息 headers)(消息在那里显示正常)
Content-Type: multipart/alternative; boundary="Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77"
Subject: Test
Date: Thu, 11 Jun 2015 07:00:29 -0700
Mime-Version: 1.0 (Mac OS X Mail 8.0 \(1990.1\))
X-Mailer: Apple Mail (2.1990.1)
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=us-ascii
Hello goodbye pdf
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77
Content-Type: multipart/mixed;
boundary="Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C"
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word;
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class=""><b class=""><i class="">Hello</i></b></div><div class=""><b class=""><i class="">goodbye pdf</i></b></div></body></html>
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Disposition: inline;
filename*=utf-8''Zamo%CC%81wienie%20ZAM21%2D150528%2D01.pdf
Content-Type: application/pdf;
x-unix-mode=0644;
name="=?utf-8?Q?Zamo=CC=81wienie_ZAM21-150528-01=2Epdf?="
Content-Transfer-Encoding: base64
(here is a base64-encoded pdf that is being decoded correctly)
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word;
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""></body></html>
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C--
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77--
有没有人在使用 Mailkit 时遇到过这种问题?或者可能不是 library-dependant,只是特定的苹果邮件?
MimeMessage.TextBody 和 MimeMessage.HtmlBody 属性是便利属性,它们使用常见做法来确定邮件的适当文本正文部分是什么。不幸的是,"this 1 part and 1 part only is the text body, and this other 1 part is the html body"没有严格的定义。
这条消息的结构如下:
multipart/alternative
text/plain
multipart/mixed
text/html
application/pdf
text/html
通常,在 multipart/alternative
中,您会遇到以下 2 种情况中的一种:
multipart/alternative
text/plain
text/html
或
multipart/alternative
text/plain
multipart/related
text/html
application/pdf
multipart/alternative
定义了替代观点(我知道,我在这里陈述的是显而易见的)。 MimeKit 找到了 text/plain
部分,因为它遵循一般约定。但下一个选择是multipart/mixed
。那不是 HTML,所以 MimeKit 不能 return 它作为 HtmlBody
。 MimeKit 用于确定 HtmlBody
的逻辑仅理解 multipart/alternative
内部的 multipart/related
因为 multipart/related
的规范定义了根文档的哪一部分(通常是 HTML 文档).
就您的消息而言,这意味着 multipart/mixed
是 您的备用视图和发送代理,用于呈现这 3 个部分sequence 作为备用消息体。您不能真的只选择这 2 个 html 部分之一并将其用作 html 正文,因为如果没有另一个(也没有 pdf),它将是不完整的。
也就是说,MimeKit 并不限制您使用 TextBody
和 HtmlBody
属性来获取消息正文。 MimeKit 提供了多种方法来自行迭代 MIME 结构,以使用您自己的逻辑来获取您需要的内容。
参考以下文档:
我一直在使用 Mailkit 库来接收电子邮件,到目前为止效果很好。但是,我们发现 Mac 上通过邮件应用程序发送的邮件存在问题。例如,我们发送的带有 pdf 附件和 html-formatted body 的消息正在作为 object 接收(通过 IMailFolder.GetMessage),没有任何附件,只有 HtmlBody 为 null (仅接收到 TextBody)
我附上来自 Web 电子邮件客户端的此邮件的源代码(没有一些个人信息 headers)(消息在那里显示正常)
Content-Type: multipart/alternative; boundary="Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77"
Subject: Test
Date: Thu, 11 Jun 2015 07:00:29 -0700
Mime-Version: 1.0 (Mac OS X Mail 8.0 \(1990.1\))
X-Mailer: Apple Mail (2.1990.1)
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=us-ascii
Hello goodbye pdf
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77
Content-Type: multipart/mixed;
boundary="Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C"
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word;
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class=""><b class=""><i class="">Hello</i></b></div><div class=""><b class=""><i class="">goodbye pdf</i></b></div></body></html>
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Disposition: inline;
filename*=utf-8''Zamo%CC%81wienie%20ZAM21%2D150528%2D01.pdf
Content-Type: application/pdf;
x-unix-mode=0644;
name="=?utf-8?Q?Zamo=CC=81wienie_ZAM21-150528-01=2Epdf?="
Content-Transfer-Encoding: base64
(here is a base64-encoded pdf that is being decoded correctly)
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word;
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""></body></html>
--Apple-Mail=_FA44F8C6-5F68-44EF-9537-8E8651DAAC0C--
--Apple-Mail=_CA0BDF81-AE2A-4E1A-9D37-8B30B5220C77--
有没有人在使用 Mailkit 时遇到过这种问题?或者可能不是 library-dependant,只是特定的苹果邮件?
MimeMessage.TextBody 和 MimeMessage.HtmlBody 属性是便利属性,它们使用常见做法来确定邮件的适当文本正文部分是什么。不幸的是,"this 1 part and 1 part only is the text body, and this other 1 part is the html body"没有严格的定义。
这条消息的结构如下:
multipart/alternative
text/plain
multipart/mixed
text/html
application/pdf
text/html
通常,在 multipart/alternative
中,您会遇到以下 2 种情况中的一种:
multipart/alternative
text/plain
text/html
或
multipart/alternative
text/plain
multipart/related
text/html
application/pdf
multipart/alternative
定义了替代观点(我知道,我在这里陈述的是显而易见的)。 MimeKit 找到了 text/plain
部分,因为它遵循一般约定。但下一个选择是multipart/mixed
。那不是 HTML,所以 MimeKit 不能 return 它作为 HtmlBody
。 MimeKit 用于确定 HtmlBody
的逻辑仅理解 multipart/alternative
内部的 multipart/related
因为 multipart/related
的规范定义了根文档的哪一部分(通常是 HTML 文档).
就您的消息而言,这意味着 multipart/mixed
是 您的备用视图和发送代理,用于呈现这 3 个部分sequence 作为备用消息体。您不能真的只选择这 2 个 html 部分之一并将其用作 html 正文,因为如果没有另一个(也没有 pdf),它将是不完整的。
也就是说,MimeKit 并不限制您使用 TextBody
和 HtmlBody
属性来获取消息正文。 MimeKit 提供了多种方法来自行迭代 MIME 结构,以使用您自己的逻辑来获取您需要的内容。
参考以下文档: