Сообщение MIME неправильно отображается в почтовом клиенте Mac
Я генерирую MIME-сообщение из кода MIME из кода. Пример формата MIME, который я использую, показан ниже. Это нормально отображается в большинстве почтовых клиентов, но в Apple Email на Mac, тогда сообщение просто говорит: "В этом сообщении нет содержимого". Может кто-нибудь пролить свет на то, почему Mail на Mac не может отображать сообщение ниже?
Спасибо большое.
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--
1 ответ
Данные в кодировке Base64- это более 4000 символов в одной строке. Это нужно разбить на более короткие строки. Вот что говорит RFC5322 "Формат интернет-сообщения" о длине строки:
2.1.1. Пределы длины линии
В этой спецификации есть два ограничения на количество символов в строке. Каждая строка символов ДОЛЖНА быть не более 998 символов и ДОЛЖНА быть не более 78 символов, исключая CRLF.
Ограничение в 998 символов связано с ограничениями во многих реализациях, которые отправляют, получают или хранят сообщения IMF, которые просто не могут обрабатывать более 998 символов в строке. Для обеспечения надежности было бы целесообразно получать реализации для обработки произвольно большого количества символов в строке. Однако существует так много реализаций, что (в соответствии с транспортными требованиями [ RFC5321 ]) не принимаются сообщения, содержащие более 1000 символов, включая CR и LF на строку, для реализаций важно не создавать такие сообщения.
Кроме того, убедитесь, что окончания строк, которые заканчивают заголовки и окружающие разделители, на самом деле CRLF
и что они точно следуют синтаксису MIME, описанному в RFC 2046 "MIME Part Two: Media Types". Выдержка (Синтаксис BNF, несколько упрощенный):
multipart-body:= [преамбула CRLF] пунктирная граница CRLF тело-часть * инкапсуляция крупный ограничитель [CRLF эпилог] граница тире:= "-" граница body-part:= MIME-part-headers [CRLF *OCTET] инкапсуляция:= разделитель CRLF часть тела разделитель:= CRLF-тире разделитель:= разделитель "-"