2016-08-25 6 views
0

Я хочу отправить электронное письмо, которое содержит только прикрепленный файл, текст или что-то еще.JAVA mail api: Зачем вам нужен Multipart для отправки электронной почты с приложением?

Почему я должен представлять это как одну часть части многостраничной электронной почты?
Почему я не могу просто написать

message.setFileName(filepath); 

Когда, с другой стороны это работает

message.setText("blablabla"); 
+0

Потому что почта должна иметь часть тела – Jens

+0

Это не из-за API электронной почты java. Это потому, что протокол SMTP. Проверьте это http://stackoverflow.com/questions/3902455/smtp-multipart-alternative-vs-multipart-mixed –

+0

Jens, @RicardoVila Вы не правы. SMTP-сообщения электронной почты поддерживают сообщения, которые имеют нетекстовый тип в качестве своего прямого тела, без использования multipart. Проверьте RFC: https://www.ietf.org/rfc/rfc2045.txt –

ответ

1

Поскольку это стандарты MIME, все сообщения электронной почты должны следовать MIME RFC для того, чтобы клиенты электронной почты для правильного отображения электронной почты. Прикрепленное изображение представляет собой двоичные данные, в то время как тело сообщения всегда ASCII, пользователь не может открыть электронное письмо с двоичным кодом в теле displayd, что было бы бесполезно. Двоичный код изображения переводится на BASE64, поэтому двоичный файл может быть передан в виде символов ASCII, и это должно сидеть на границе MIME электронной почты. Программное обеспечение электронной почты знает, как найти эти границы, или будет либо показывать изображение пользователю в виде вложения, либо отобразить правильный путь в теле, в зависимости от того, как вы настраиваете границы MIME. Multipart означает, что электронное письмо имеет несколько границ, где один из них является телом электронной почты ASCII, независимо от того, является ли он бланком или нет.

+0

Это имеет смысл, спасибо за ответ – John

+0

Прочтите https://www.ietf.org/rfc/rfc2045.txt - тела сообщений, содержащие поддерживается вложение, а не текст. Да, они должны быть закодированы (например, в base64 или кавычках), но им не нужно быть в мультипартике. Если вы считаете иначе, просьба указать ссылку. –