ATTnnnnn.txt вложения при получении электронной почты в Outlook - PullRequest
7 голосов
/ 27 марта 2009

Я написал SMTP-клиент, который отправляет электронные письма с вложениями. Все хорошо, за исключением того, что, когда электронное письмо, отправленное моей программой, получено Outlook, оно отображает два вложения - файл фактически отправлен и файл с двумя символами CR и LF внутри и этот файл имеет имя ATT ?????. Txt.

Я выполнил поиск - нашел множество совпадений, таких как this , на наличие похожих проблем и проверил все, что мог. Еще больше - я сравнил два электронных письма - отправленных моей программой и отправленных Opera, и я не могу понять разницу. Однако то, что отправляет Opera, интерпретируется правильно, а то, что отправляет моя программа, - нет. То, что отправляет моя программа, правильно интерпретируется рядом других почтовых клиентов, но не Outlook.

Я telnet'et на SMTP-сервер, извлек два электронных письма в текстовый файл - одно из моей программы, другое из Opera, и сравнил их рядом. Я не увидел никакой разницы, которая могла бы повлиять на интерпретацию почтовым клиентом.

Вот пример сообщения (адреса заменены, содержимое файла обрезано, пустые строки точно так же, как они отображаются в реальных сообщениях, строки не превышают 80 символов):

To: user1@host.com, user2@host.com
Subject: subject
Content-Type: multipart/mixed; boundary="------------boundary"
MIME-Version: 1.0

--------------boundary
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

here goes the Base64 encoded text part - it may be localized, so 
it's better to UTF8 it and do Base64

--------------boundary
Content-Disposition: attachment; filename="file.jpg"
Content-Type: application/octet-stream; name="file.jpg"
Content-Transfer-Encoding: base64

here goes the Base64 encoded file data

--------------boundary

Я пытался играть с разрывами строк после последней границы - пробовал нет, раз, два, три, но это не улучшает ситуацию.

Существует ли ряд странных ограничений, которым должен следовать почтовый клиент для создания сообщений, которые правильно интерпретируются Outlook?

1 Ответ

13 голосов
/ 27 марта 2009

Последняя граница детали MIME должна быть указана путем добавления двух черточек:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------boundary"

--------------boundary
...

--------------boundary
...

--------------boundary--

Подробнее читайте здесь: RFC1341 / 7.2 Multipart Content-Type

...