2009-03-27 3 views
7

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

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

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

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

 
To: [email protected], [email protected] 
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 правильно?

+0

Вы можете размещать точное сообщение генерирует ваш клиент SMTP? Я совершенно уверен, что вы допустили ошибку где-то в заголовках сообщений. – Tomalak

+0

В конце концов, не должно быть границы «--------------»? (Обратите внимание на две дополнительные дефисы) – Tomalak

+0

Да, да, это дополнительные два тире в конце !!! Я никогда не читал об этом ни в каких документах, и это для меня совершенно неожиданно. – sharptooth

ответ

13

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

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

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

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

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

Больше читать здесь: RFC1341/7.2 The Multipart Content-Type

Смежные вопросы