Al crear mensajes de correo electrónico que se supone que para establecer el tipo de contenido a multipart/alternative
la hora de enviar HTML y texto o multipart/mixed
cuando el envío de texto y archivos adjuntos.
Entonces, ¿qué hacer si desea enviar HTML, texto y archivos adjuntos? Usa ambos?
email
smtp
content-type
mime
Xeoncross
fuente
fuente
Respuestas:
Hoy llegué a este desafío y encontré estas respuestas útiles, pero no lo suficientemente explícitas para mí.
Editar : Acabo de encontrar el correo electrónico de Apache Commons que lo envuelve muy bien, lo que significa que no necesita saber a continuación.
Si su requisito es un correo electrónico con:
La única estructura que encontré que funciona con Gmail / Outlook / iPad es:
Y el código es:
Y un ejemplo de cómo usarlo desde Gmail
fuente
"<" id-left "@" id-right ">"
.Use
multipart/mixed
con la primera parte comomultipart/alternative
y partes posteriores para los archivos adjuntos. A su vez, usetext/plain
ytext/html
partes dentro de lamultipart/alternative
parte.Un cliente de correo electrónico capaz debería reconocer la
multipart/alternative
parte y mostrar la parte de texto o la parte html según sea necesario. También debe mostrar todas las partes posteriores como partes adjuntas.Lo importante a tener en cuenta aquí es que, en mensajes MIME multiparte, es perfectamente válido tener partes dentro de partes. En teoría, ese anidamiento puede extenderse a cualquier profundidad. Cualquier cliente de correo electrónico razonablemente capaz debería poder procesar recursivamente todas las partes del mensaje.
fuente
multipart/alternative
correctamente. La última entrada es la parte de mejor / mayor prioridad, por lo que probablemente desee colocar latext/html
parte como la última subparte. Por RFC1341 .multipart/related
y cuándo usar esto?multipart/alternative
indica que solo se debe mostrar una de las partes incluidas, por ejemplo, una parte estext/plain
y una parte estext/html
. Por lo tanto, el cliente de correo electrónico no debe mostrar ambas partes, sino solo una. es decir, no están relacionados.multipart/related
indica que las diversas subpartes son parte de la parte raíz principal, por ejemplo, la parte principal estext/html
y las subpartes son imágenes incrustadas. Ver aquí para más información.mutt
cliente CLI para verificar que haya configurado correctamente sus mensajes MIME multiparte. Si presionav
mientras ve un mensaje, se mostrará y permitirá atravesar el árbol anidado de las partes MIME.Los mensajes tienen contenido. El contenido puede ser texto, html, DataHandler o Multipart, y solo puede haber un contenido. Las imágenes prediseñadas solo tienen BodyParts, pero pueden tener más de una. BodyParts, como Mensajes, puede tener contenido que ya se ha descrito.
Un mensaje con HTML, texto y un archivo adjunto se puede ver jerárquicamente de esta manera:
Y el código para construir tal mensaje:
fuente
Llegué a este problema. Esta arquitectura (de la respuesta de Lain) funcionó para mí. Aquí está la solución en Python.
Aquí está la función principal de creación de correo electrónico:
Aquí está el código completo para enviar un correo electrónico que contenga html / text / adjunto:
fuente
Basándome en el ejemplo de Iain, tenía una necesidad similar de componer estos correos electrónicos con texto sin formato, HTML y archivos adjuntos múltiples, pero usando PHP. Dado que estamos utilizando Amazon SES para enviar correos electrónicos con archivos adjuntos, la API actualmente requiere que cree el correo electrónico desde cero utilizando la función sendRawEmail (...).
Después de mucha investigación (y una frustración mayor que la normal), el problema se resolvió y se publicó el código fuente de PHP para que pueda ayudar a otros que experimentan un problema similar. Espero que esto ayude a alguien: la tropa de monos que forcé a trabajar en este problema ahora están agotados.
Código fuente PHP para enviar correos electrónicos con archivos adjuntos utilizando Amazon SES.
fuente
$boundary
contienen todo el cuerpo con archivos adjuntos, pero solo$boundary2
contienen HTML o texto sin formato. Genial solución. Dígame por favor, esta es su solución para enviar texto sin formato, ¿es este mensaje alternativo si el cliente de correo no admite HTML? ¡Gracias!Gran respuesta Lain!
Hubo un par de cosas que hice para que esto funcione en un conjunto más amplio de dispositivos. Al final enumeraré los clientes en los que probé.
Agregué un nuevo constructor de compilación que no contenía los archivos adjuntos de parámetros y no usaba MimeMultipart ("mixto"). No es necesario mezclar si solo envía imágenes en línea.
En el método addTextVersion agregué charset al agregar contenido que probablemente podría / debería pasarse, pero solo lo agregué estáticamente.
El último elemento fue agregar al método addImagesInline. Agregué la configuración del nombre de archivo de la imagen al encabezado con el siguiente código. Si no hace esto, al menos en el cliente de correo predeterminado de Android tendrá imágenes en línea que tienen un nombre de Desconocido y no las descargará automáticamente ni las presentará por correo electrónico.
Finalmente, esta es la lista de clientes que probé. Outlook 2010, aplicación web de Outlook, Internet Explorer 11, Firefox, Chrome, Outlook usando la aplicación nativa de Apple, correo electrónico a través de Gmail: cliente de correo del navegador, Internet Explorer 11, Firefox, Chrome, cliente de correo predeterminado de Android, cliente de correo predeterminado de iPhone osx, Gmail cliente de correo en Android, cliente de correo de Gmail en iPhone, correo electrónico que pasa por Yahoo: cliente de correo del navegador, Internet Explorer 11, Firefox, Chrome, cliente de correo predeterminado de Android, cliente de correo predeterminado de iPhone osx.
Espero que ayude a alguien más.
fuente
Aquí está lo mejor: mensaje mime multiparte / mixto con archivos adjuntos e imágenes en línea
E imagen: https://www.qcode.co.uk/images/mime-nesting-structure.png
Esquema multiparte / relacionado / alternativo
fuente
Subtipo mixto
Subtipo Alternativo
Fuente
fuente