При создании сообщения электронной почты , вы должны установить Content-Type для multipart/alternative
при отправке HTML и TEXT или multipart/mixed
при отправке текстовых и вложений.
Так что же делать, если вы хотите отправить HTML, текст и вложения? Использовать оба?
email
smtp
content-type
mime
Xeoncross
источник
источник
Ответы:
Сегодня я справился с этой задачей, и я нашел эти ответы полезными, но недостаточно четкими для меня.
Редактировать : только что нашел письмо Apache Commons Email, которое оборачивает это хорошо, то есть вам не нужно знать ниже.
Если ваше требование - электронная почта с:
Единственная найденная структура, которая работает с Gmail / Outlook / iPad, это:
И код:
И пример использования его из Gmail
источник
"<" id-left "@" id-right ">"
.Используйте
multipart/mixed
с первой частью какmultipart/alternative
и последующие части для приложений. В свою очередь, используйтеtext/plain
иtext/html
детали внутриmultipart/alternative
детали.Способный почтовый клиент должен затем распознать эту
multipart/alternative
часть и при необходимости отобразить текстовую или HTML-часть. Он также должен показывать все последующие части как части приложения.Здесь важно отметить, что в составных сообщениях MIME вполне допустимо иметь части внутри частей. Теоретически, это вложение может распространяться на любую глубину. Любой разумно способный почтовый клиент должен затем иметь возможность рекурсивно обрабатывать все части сообщения.
источник
multipart/alternative
. Последняя запись является частью с наилучшим / наивысшим приоритетом, поэтому вы, вероятно, захотите поместить ееtext/html
как последнюю часть. Согласно RFC1341 .multipart/related
и когда это использовать?multipart/alternative
означает, что должна отображаться только одна из включенных частей - например, одна часть есть,text/plain
а одна часть естьtext/html
. Так что почтовый клиент не должен отображать обе части, а только одну. т.е. они не связаны.multipart/related
указывает на то, что различные части являются частью основной корневой части, например, основная часть являетсяtext/html
вложенными изображениями. Смотрите здесь для получения дополнительной информации.mutt
клиент CLI, чтобы убедиться, что вы правильно настроили ваши составные сообщения MIME. Если вы нажметеv
во время просмотра сообщения, оно будет отображать и разрешать обход вложенного дерева частей MIME.Сообщения имеют контент. Контент может быть текстовым, html, DataHandler или Multipart, и может быть только один контент. У Multiparts есть только BodyParts, но может быть несколько. BodyParts, как и сообщения, может иметь контент, который уже был описан.
Сообщение с HTML, текстом и вложением можно просматривать иерархически следующим образом:
И код для построения такого сообщения:
источник
Я ударил эту проблему. Эта архитектура (из ответа Лейна) сработала для меня. Вот решение в Python.
Вот основная функция создания электронной почты:
Вот полный код для отправки электронного письма, содержащего html / text / attachment:
источник
Основываясь на примере Iain, у меня возникла аналогичная потребность в составлении этих писем с отдельным открытым текстом, HTML и несколькими вложениями, но с использованием PHP. Поскольку мы используем Amazon SES для отправки электронных писем с вложениями, API в настоящее время требует, чтобы вы создавали электронную почту с нуля, используя функцию sendRawEmail (...).
После долгих расследований (и больше, чем обычно) разочарование было решено, и исходный код PHP был опубликован, чтобы помочь другим, сталкивающимся с подобной проблемой. Надеюсь, это кому-нибудь поможет - отряд обезьян, которых я заставил работать над этой проблемой, теперь исчерпан.
Исходный код PHP для отправки электронных писем с вложениями с помощью Amazon SES.
источник
$boundary
содержат все тело с вложениями, но$boundary2
содержат только HTML или простой текст. Гениальное решение. Скажите, пожалуйста, это ваше решение для отправки простого текста, это альтернативное сообщение, если почтовый клиент не поддерживает HTML? Спасибо!Отличный ответ Lain!
Я сделал пару вещей, чтобы сделать эту работу в более широком наборе устройств. В конце я перечислю клиентов, на которых я проверял.
Я добавил новый конструктор сборки, который не содержал вложений параметров и не использовал MimeMultipart («mixed»). Нет необходимости смешивать, если вы отправляете только встроенные изображения.
В методе addTextVersion я добавил кодировку при добавлении контента, который, вероятно, можно / нужно передать, но я просто добавил его статически.
Последний элемент был добавлен в метод addImagesInline. Я добавил настройку имени файла изображения в заголовок с помощью следующего кода. Если вы этого не сделаете, то, по крайней мере, в почтовом клиенте Android по умолчанию у него будут встроенные изображения с именем Unknown, и они не будут автоматически загружаться и представляться в электронной почте.
Итак, наконец, это список клиентов, на которых я тестировал. Outlook 2010, Outlook Web App, Internet Explorer 11, Firefox, Chrome, Outlook с использованием собственного приложения Apple, электронная почта, проходящая через Gmail - почтовый клиент браузера, Internet Explorer 11, Firefox, Chrome, почтовый клиент по умолчанию Android, почтовый клиент по умолчанию osx IPhone, Gmail почтовый клиент на Android, почтовый клиент Gmail на IPhone, электронная почта, проходящая через Yahoo - почтовый клиент браузера, Internet Explorer 11, Firefox, Chrome, почтовый клиент по умолчанию для Android, почтовый клиент по умолчанию для OSX IPhone.
Надеюсь, это поможет кому-то еще.
источник
Вот лучшее: Многочастное / смешанное сообщение MIME с вложениями и встроенными изображениями
И изображение: https://www.qcode.co.uk/images/mime-nesting-structure.png
Схема многочастная / связанная / альтернативная
источник
Смешанный подтип
Альтернативный подтип
Источник
источник