我有一个发送电子邮件的应用程序,并且好几个月,它运行正常。我最近遇到了发送到iPhone utf-8
的{{1}}个编码电子邮件的问题(即不是Exchange account
)。
所有接收者必须看到的是一大堆毫无意义的人物,如IMAP
。
将我的电子邮件标题与Gmail进行比较,我发现我与LS0tLS0tPV9QYXJ0XzE0N18[....]
有一个额外的Content-Transfer-Encoding
。
我的电子邮件看起来像
Content-Type: multipart/alternative;
如果我删除了额外设置,我的电子邮件将被收到并正确显示。
我的问题:
Delivered-To: ...
Received: ...
...
MIME-Version: ...
Content-Type: multipart/alternative;
boundary="----=_boundary"
Content-Transfer-Encoding: Base64 # <= the extra setting
----=_boundary
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: Base64
YmVu0Cg==
----=_boundary
Content-type: text/html; charset=utf-8
Content-Transfer-Encoding: Base64
PGh0bWwgeG1sbnM6bz0iIj48aGVhZD48dGl0bGU+PC90aXRsZT48L2hlYWQ+PGJvZHk+YmVub2l0
PC9ib2R5PjwvaHRtbD4NCjx9IjAiIC8+Cg==
----=_boundary
基本上需要Encoding
设置,即使是特定情况吗? 修改
我找到IETF
:
编码注意事项:多部分内容类型不能包含编码。
但我也在Wikipedia
上找到了:
多部分类型的内容传输编码必须始终如此 “7bit”,“8bit”或“二进制”以避免可能出现的并发症 由多级解码构成。
这不矛盾吗?
答案 0 :(得分:5)
实际上,multipart的每个部分都有自己的编码,为multipart容器声明一个没有意义。无论如何,我无法理解维基百科的报价;无论如何,它几乎不具有权威性。
答案 1 :(得分:5)
IETF和维基百科的声明并不是真的相互矛盾。 7bit
,8bit
或binary
并非真正的内容编码,因为它们未指定内容的任何转换。他们只是声明内容尚未编码。在7bit
的情况下,它还指定即使消息需要通过非8位干净的传输发送,也不需要对内容进行编码。
只有最底层的邮件应具有实际Content-Transfer-Encoding
,例如base64
或quoted-printable
。在您从外部引用的消息中肯定不是base64编码的,因此声明它不仅违反了标准而且也是不正确的。这肯定会导致显示该消息的问题。