¿Por qué los webmails (como Gmail) envían mensajes MIME usando multipart/subtipo alternativo (al componer en HTML) mientras que otros envían HTML como MIME con partes de texto/html adentro (sin usar subtipo alternativo)?Subtipo multiparte/alternativo, cuando el cliente lo usa?
Respuesta
multipart/alternative
indica que cada parte es una versión "alternativa" del mismo contenido (o similar), cada una en un formato diferente denotado por su encabezado "Content-Type". Los formatos están ordenados por lo fieles que son al original, con el primero menos fiel y el último más fiel.
Agentes de correo como Gmail saben lo que están haciendo, y convierten text/html
en text/plain
y ponen ambas alternativas en sus correos electrónicos y dejan que el receptor decida qué alternativa usar.
También hay agentes de correo que no saben cómo extraer una versión de solo texto del contenido html, simplemente porque el desarrollador no se molestó en implementarlo, por lo que solo enviaron text/html
sin ninguna alternativa.
Y a veces - los llamo los locos - envíe multipart/alternative
, pero en realidad solo coloque texto/html sin ninguna alternativa. Lo cual no es realmente agradable, pero no va contra ninguna especificación.
El section 5.1.4 de RFC 2046 define multipart/alternative
tipo MIME para permitir que el remitente para proporcionar diferentes representaciones, intercambiables de el mismo mensaje y dejarlo hasta el receptor de elegir la forma de presentación más adecuado para sus capacidades. Tenga en cuenta que si bien debe conservarse el significado general de cada representación para el usuario, generalmente hay cierta pérdida de información de una representación a la otra (por ejemplo, text/plain
falta la información de formato con respecto a text/html
). Por lo general, las alternativas deben ordenarse de la más simple a la más rica, es decir, si las alternativas son nuevamente text/html
y text/plain
, entonces text/plain
debería ser lo primero. Esto ayuda a los usuarios de visores que no cumplen con MIME en los que se mostrará primero la parte más fácil de interpretar. En general, un visor conforme a MIME debería mostrar la última representación que es capaz de ver, ya que es la más preferible.
Este tipo de contenido a menudo se contrasta con multipart/mixed
donde se combinan un número de recursos diferentes en un solo mensaje.
La razón principal por la que algunos servicios de correo proporcionan mensajes como multipart/alternative
es para admitir diferentes tipos de aplicaciones de visualización en el extremo de recepción. Por ejemplo, algunos espectadores carecen de la capacidad de representar HTML y requieren una representación de text/plain
para que el mensaje sea legible. Al mismo tiempo, otros espectadores tienen la capacidad de procesar HTML y pueden proporcionar una experiencia de usuario mucho mejor cuando el mensaje se entrega como text/html
. La solución más flexible para la compensación entre el soporte de una amplia gama de visores y la mejora de la experiencia del usuario para los más capaces se logra mediante la entrega de ambas representaciones envueltas en un mensaje multipart/alternative
.
Para más información, vea RFC 2046.
- 1. ¿Debo instalar el servidor sql en cada cliente si mi software lo usa?
- 2. ¿Qué sucede cuando el servidor tcp/udp publica más rápido de lo que consume el cliente?
- 3. protobuf.net subtipo inesperado
- 4. ¿Cómo es que Xcode no se vincula automáticamente con QuartzCore cuando el proyecto lo usa?
- 5. __udivdi3 undefined: cómo encontrar el código que lo usa?
- 6. ¿Utiliza Qt y por qué lo usa?
- 7. Knockout.js valueUpdate no funciona cuando el usuario usa el teclado
- 8. ¿Usa un nombre de remitente predeterminado cuando usa SendGrid?
- 9. ¿Implementa un cliente C# que usa WebServices sobre SSL?
- 10. Socket IO detectar cuando el cliente ha perdido la conexión
- 11. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 12. MySQL no usa índices ("Usando filesort") cuando usa ORDER BY
- 13. ¿Qué es Repo y por qué lo usa Google?
- 14. ¿Cómo eliminar la dependencia de subtipo?
- 15. Cómo establecer el tipo de columna cuando se usa EPPlus
- 16. ObjectSpace: ¿qué es y cómo lo usa la gente?
- 17. ¿Necesita un interruptor de ruptura cuando se usa el retorno?
- 18. Hibernar con la secuencia de Oracle no lo usa
- 19. Scala: Implementando un subtipo de Numérico [T]
- 20. Conservar el retorno de carro cuando se usa XDocument.Parse
- 21. Undefined offset Cuando se usa PHP explode()
- 22. NoClassDefFoundError cuando se usa el alcance del sistema
- 23. PHP Save Session cuando se usa session_write_close();
- 24. ¿Qué cliente Memcached .NET usa, EnyimMemcached vs. BeITMemcached?
- 25. MATLAB - ¿ejecuta el destructor de objetos cuando usa 'borrar'?
- 26. Reconexión de Cliente cuando el servidor se reinicia en WebSocket
- 27. ¿Directorio de filtro cuando usa shutil.copytree?
- 28. de respuesta cuando así lo solicite el código original - PHP
- 29. TextView corta el texto cuando es lo suficientemente largo
- 30. ¿El orden del predicado es importante cuando se usa LINQ?
Buena explicación. –