0

我正在从代码生成一个多部分的 mime 电子邮件。我使用的 mime 格式示例如下所示。这在大多数电子邮件客户端中显示得很好,但在 Mac 上的 Apple 电子邮件中,消息只会显示“此消息没有内容”。谁能解释为什么 Mac 上的 Mail 无法显示下面的消息?

非常感谢。

X-SYSTEM-Source: 0BC1ACEB-5527-42BF-A618-814EBB750F59
x-virtual-mta: zzzstandardmta
MIME-Version: 1.0
From: ScanTest <ScanTest@xxxxxx.com>
To: Jane Doe <janedoe@zzzzzz.com>
Date: 25 Jun 2014 15:42:26 +0100
Subject: Generic ScanTest Email
Content-Type: multipart/mixed; boundary=--mainboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1
Message-ID: <199999-19999908ies800000016@webserver.vvvvvvvvv.co.uk>
X-OriginalArrivalTime: 25 Jun 2014 14:42:26.0632 (UTC) FILETIME=[AEE3E480:01CF9083]
X-Original-To: janedoe@zzzzzz.com
X-Virus-Scanned: ClamAV using ClamSMTP


----mainboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1
Content-Type: multipart/alternative; boundary=--altboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1


----altboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit


This is ScanTest from 

Dear Jane<br /><br />This is a test email.  Does it look ok?<br /><br />Here is some more blurb. One of the things about this text is that it is not in Latin. Here is some more blurb. One of the things about this text is that it is not in Latin. Here is some more blurb. One of the things about this text is that it is not in Latin. Here is some more blurb. One of the things about this text is that it is not in Latin.<br />Here is some more blurb. One of the things about this text is that it is not in Latin.<br />Here is some more blurb. One of the things about this text is that it is not in Latin<br /><br />Here is some more blurb. One of the things about this text is that it is not in Latin<br />Here is some more blurb. One of the things about this text is that it is not in Latin<br />Here is some more blurb. One of the things about this text is that it is not in Latin



Thanks from the team

----altboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSIgLz4NCiAgICA8dGl0bGU+U2NhblRlc3QgLSA8L3RpdGxlPg0KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCTwhLS0NCgkJYm9keSB7DQoJCQljb2xvcjogIzMzMzMzMzsNCgkJCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWY7DQoJCQlmb250LXNpemU6IDEycHg7DQoJCX0NCgkJYSB7DQoJCQlib3JkZXI6IDA7CQ0KCQl9DQoJCWEgaW1nIHsNCgkJCWJvcmRlcjogMDsJDQoJCX0NCgkJcCB7DQoJCQlwYWRkaW5nOiAwIDEwcHggMCAxMHB4Ow0KCQl9DQoJCWgxIHsNCgkJCXBhZGRpbmc6IDAgMTBweCAwIDEwcHg7DQoJCQlmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOw0KCQkJZm9udC1zaXplOiAyMHB4Ow0KCQkJY29sb3I6ICMzMzMzMzM7DQoJCQlsaW5lLWhlaWdodDogMTUwJTsNCgkJfQ0KCQlpbWcgew0KCQkJdmVydGljYWwtYWxpZ246IG1pZGRsZTsJDQoJCX0NCgkJLmNvbnRlbnQgew0KCQkJZm9udC1mYW1pbHk6IFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsNCgkJCWZvbnQtc2l6ZTogMTJweDsNCgkJCWNvbG9yOiAjMzMzMzMzOwkNCgkJCWxpbmUtaGVpZ2h0OiAxNTAlOw0KCQl9DQoJCXAubG9nbyB7DQoJCQlwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KCQl9DQoJCXAuZm9vdGVyIHsNCgkJCXBhZGRpbmc6IDAgMTBweCAwIDEwcHg7DQoJCQlmb250LWZhbWlseTogVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOw0KCQkJZm9udC1zaXplOiAxMHB4Ow0KCQkJY29sb3I6ICMzMzMzMzM7DQoJCQlsaW5lLWhlaWdodDogMTUwJTsNCgkJfQ0KCQlhOmxpbmssIGE6dmlzaXRlZCB7DQoJCQljb2xvcjogIzAwNjY5OTsNCgkJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgkJfQ0KCQlhOmhvdmVyIHsNCgkJCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KCQl9DQoJCS50YWJsZS1ib3JkZXIgew0KCQkJYm9yZGVyOiAwOw0KCQkJcGFkZGluZzogMTBweCAwIDEwcHggMDsNCgkJfQ0KCQktLT4NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPHRhYmxlIHdpZHRoPSI2MDAiIGJvcmRlcj0iMCIgY2xhc3M9InRhYmxlLWJvcmRlciIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgIAk8cD48aW1nIHNyYz0iaHR0cDovL3d3dy5hdG9taWNjcm0uY29tL0ltYWdlc2VydmVyL0xvZ28vU2NhblRlc3QiIC8+DQogICAgICAgICAgICAJPC9wPg0KICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB2YWxpZ249InRvcCI+DQogICAgICAgICAgICAJPHAgY2xhc3M9ImxvZ28iPg0KICAgICAgICAgICAgICAgIAk8IS0tPGltZyBzcmM9Imh0dHA6Ly90cmFkZXNob3cubWt0cG9pbnQuY29tL0ltYWdlc2VydmVyL0xvZ28vW1tTaG93TG9nby5naWZdXSIgaGVpZ2h0PSI3NSIgIC8+LS0+DQoJCQkJPC9wPg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJjb250ZW50Ij4NCiAgICAgICAgICAgICAgICA8aDE+VGhpcyBpcyBTY2FuVGVzdCBmcm9tIDwvaDE+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHA+RGVhciBKYW5lPGJyIC8+PGJyIC8+VGhpcyBpcyBhIHRlc3QgZW1haWwuICBEb2VzIGl0IGxvb2sgb2s/PGJyIC8+PGJyIC8+SGVyZSBpcyBzb21lIG1vcmUgYmx1cmIuIE9uZSBvZiB0aGUgdGhpbmdzIGFib3V0IHRoaXMgdGV4dCBpcyB0aGF0IGl0IGlzIG5vdCBpbiBMYXRpbi4gSGVyZSBpcyBzb21lIG1vcmUgYmx1cmIuIE9uZSBvZiB0aGUgdGhpbmdzIGFib3V0IHRoaXMgdGV4dCBpcyB0aGF0IGl0IGlzIG5vdCBpbiBMYXRpbi4gSGVyZSBpcyBzb21lIG1vcmUgYmx1cmIuIE9uZSBvZiB0aGUgdGhpbmdzIGFib3V0IHRoaXMgdGV4dCBpcyB0aGF0IGl0IGlzIG5vdCBpbiBMYXRpbi4gSGVyZSBpcyBzb21lIG1vcmUgYmx1cmIuIE9uZSBvZiB0aGUgdGhpbmdzIGFib3V0IHRoaXMgdGV4dCBpcyB0aGF0IGl0IGlzIG5vdCBpbiBMYXRpbi48YnIgLz5IZXJlIGlzIHNvbWUgbW9yZSBibHVyYi4gT25lIG9mIHRoZSB0aGluZ3MgYWJvdXQgdGhpcyB0ZXh0IGlzIHRoYXQgaXQgaXMgbm90IGluIExhdGluLjxiciAvPkhlcmUgaXMgc29tZSBtb3JlIGJsdXJiLiBPbmUgb2YgdGhlIHRoaW5ncyBhYm91dCB0aGlzIHRleHQgaXMgdGhhdCBpdCBpcyBub3QgaW4gTGF0aW48YnIgLz48YnIgLz5IZXJlIGlzIHNvbWUgbW9yZSBibHVyYi4gT25lIG9mIHRoZSB0aGluZ3MgYWJvdXQgdGhpcyB0ZXh0IGlzIHRoYXQgaXQgaXMgbm90IGluIExhdGluPGJyIC8+SGVyZSBpcyBzb21lIG1vcmUgYmx1cmIuIE9uZSBvZiB0aGUgdGhpbmdzIGFib3V0IHRoaXMgdGV4dCBpcyB0aGF0IGl0IGlzIG5vdCBpbiBMYXRpbjxiciAvPkhlcmUgaXMgc29tZSBtb3JlIGJsdXJiLiBPbmUgb2YgdGhlIHRoaW5ncyBhYm91dCB0aGlzIHRleHQgaXMgdGhhdCBpdCBpcyBub3QgaW4gTGF0aW48L3A+DQoNCiAgICAgICAgICAgICAgICA8cD48L3A+DQoNCiAgICAgICAgICAgICAgICA8cD5UaGFua3MgZnJvbSB0aGUgdGVhbTwvcD4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxociB3aWR0aD0iOTYlIiAvPg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIAk8YnIgLz4NCiAgICAgICAgICAgICAgICANCg0KDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGFibGU+DQo8L2JvZHk+DQo8L2h0bWw+

----altboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1--

----mainboundary_67d1fe5e-6a7f-4c46-818d-9a33a6abddf1--
4

1 回答 1

0

Base64 编码的数据在一行上有超过 4000 个字符。这需要分成较短的行。这就是RFC5322“Internet 消息格式”关于行长的说法:

2.1.1。行长限制

该规范对一行中的字符数有两个限制。 每行字符必须不超过 998 个字符,并且应该不超过 78 个字符,不包括 CRLF。

998 个字符的限制是由于发送、接收或存储 IMF 消息的许多实现中的限制,这些消息根本无法处理一行中超过 998 个字符。为了健壮性,接收实现可以很好地处理一行中任意大量的字符。然而,有太多的实现(符合 [ RFC5321 ] 的传输要求)不接受包含超过 1000 个字符的消息,包括每行的 CR 和 LF,因此不创建此类消息对实现很重要。

此外,请确保终止标头和周围分隔符的行尾实际上是CRLF,并且它们严格遵循RFC 2046“MIME 第二部分:媒体类型”中描述的 MIME 语法。摘录(BNF 语法,有些简化):

multipart-body := [序言 CRLF]
                  虚线边界CRLF
                  身体部分 *封装
                  闭合分隔符
                  [CRLF 结语]

dash-boundary := "--" 边界

body-part := MIME-part-headers [CRLF *OCTET]

封装 := 分隔符
                 CRLF 身体部位

delimiter := CRLF 破折号边界

close-delimiter := 分隔符“--”
于 2014-08-01T23:16:35.647 回答