Estoy creando eml y guardándolos en un directorio utilizando el procedimiento mencionado en here. Quiero saber cómo enviar estos archivos eml? Intenté usar el objeto de la clase SMTPClient pero toma el objeto MailMessage como su parámetro y no pude encontrar y crear un objeto de tipo MailMessage usando estos archivos eml guardados.Enviar archivos eml guardados en el disco
Respuesta
Usa EMLReader para recuperar datos del archivo .eml. Contiene todos los datos que necesita para crear un objeto MailMessage como Desde, Hasta, Asunto, Cuerpo & mucho más.
FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite);
EMLReader reader = new EMLReader(fs);
fs.Close();
MailMessage message = new System.Net.Mail.MailMessage(reader.From, reader.To, reader.Subject, reader.Body);
Cargando correctamente un archivo EML no es tan fácil como parece. Puede escribir una implementación que funcione en 95% de casos en pocos días. Restante 5% tomaría al menos varios meses ;-). Lo sé, porque estoy involucrado en el desarrollo de uno.
considerar seguir dificulities:
- correos electrónicos Unicode
- idiomas de derecha a izquierda
- corrección de archivos EML malformaciones causadas por errores bien conocidos en los clientes de correo populares y servidores
- se ocupan de S/MIME (mensajes de correo electrónico cifrados y firmados)
- que trata correctamente con varios métodos de codificación de archivos adjuntos
- tratar con las imágenes en línea y hojas de estilo incrustadas en mensajes de correo electrónico HTML
- asegurándose de que se analiza correctamente un MIME torture message de Mike Crispin (coautor de Mimo y IMAP RFC)
- asegurándose de que mensaje incorrecto no resultará en tampón infestadas o en otra aplicación estrellan
- manejo de mensajes jerárquicos (mensaje con mensajes adjuntos)
- asegurándose de que se usa bien muy correos electrónicos de gran
maduración de tales analizador lleva años y retroalimentación continua para sus usuarios . En este momento no se incluye dicho analizador en .NET Framework. Hasta que cambie, me gustaría obtener un analizador MIME de terceros de un proveedor establecido.
El código siguiente utiliza nuestro Rebex Secure Mail component, pero estoy seguro de que una tarea similar podría replicarse fácilmente con componentes de otros proveedores también.
El código está basado en Mail Message tutorial.
// create an instance of MailMessage
MailMessage message = new MailMessage();
// load the message from a local disk file
message.Load("c:\\message.eml");
// send message
Smtp.Send(message, "smtp.example.org");
Hola Martin, has probado este código message.Load(). No hay tal método. Por favor intente con su código y luego publique. –
@Vikrant El código funciona bien. Utiliza la clase Rebex.Mail.MailMessage que tiene el método Load desde la versión 1.0. Se menciona en la publicación justo arriba del código. Tal vez te refieres a que System.Net.Mail.MailMessage no tiene un método Load. Lo sé, esa es la razón exacta por la que mi respuesta utiliza una clase diferente. –
Do What I did ... give up.
La construcción del objeto MailMessage parece ser el enfoque que tengo una serie de preguntas similares pendientes de aquí también ... How do i send an email when i already have it as a string?
Por lo que he visto la forma más sencilla de hacerlo es utilizar un conector directo a volcar todo el contenido del archivo .eml hasta el servidor de correo como está y dejar que el servidor de correo entienda las cosas difíciles como desde, sujeto, ect analizando el correo electrónico usando su motor.
El único problema ...RFC 821 ... tanto dolor, estoy tratando de encontrar una manera limpia de hacerlo y leer rápidamente el correo que ya está en el buzón.
EDIT:
he encontrado una solución limpia y cubierta en mi hilo :)
Para los registros:
En Nuget empaquetador de escritura de la consola:
Install-Package LumiSoft.Net.dll
Luego en su código:
using (FileStream fs = new FileStream(cacheFileName, FileMode.Open, FileAccess.Read))
using (LumiSoft.Net.SMTP.Client.SMTP_Client client =
new LumiSoft.Net.SMTP.Client.SMTP_Client())
{
client.SendMessage(fs);
}
Si usted es una tienda de Microsoft y tienen un servidor Exchange de todos modos, entonces no hay otra solución que es mucho, mucho más fácil que todo lo que aquí se sugiere:
Cada servidor de Exchange ha configurado un directorio de recogida De la caja.
Por defecto, es %ExchangeInstallPath%TransportRoles\Pickup
.
Copie los archivos .eml
a ese directorio y Exchange enviará automáticamente los correos.
leer este artículo de TechNet para obtener más información:
Pickup directory and Replay directory
Como otros han demostrado, EML no es sólo una buena manera de serialize
un mensaje de correo. Puede ser mejor guardando sus correos en otro formato. Si bien hay varios motores de serialización en .Net Framework para serializar cualquier objeto, también puede considerar simplemente guardar los componentes de sus correos, como direcciones, cuerpo, archivos para adjuntar en base64, en un archivo Xml de su propio diseño.
A continuación se muestra un ejemplo para empezar:
<?xml version="1.0" encoding="utf-8"?>
<mail>
<to display="Thomas Edison" address="[email protected]" />
<body>
Hi Thomas,
How are you doing?
Bye
</body>
<attachment name="MaryLamb.wav">
cmF0aWUgYWFuIGluIFBERi1mb3JtYWF0LiBEZSBmYWN0dXVyIGlzIGVlbiBvZmZpY2ll
ZWwgZ2VzaWduZWVyZA0KZG9jdW1lbnQgdmFuIEV1cm9maW5zIE9tZWdhbSBCVi4gRGUg
c2lnbmF0dXJlIGt1bnQgdSB2ZXJpZmnDq3Jlbi4NCg0KVm9vciBoZXQgdmVyaWZpw6ty
...
</attachment>
</mail>
ventaja adicional sería que, al contrario que con la creación de EML, no es necesario el SMTPClient para construir los archivos de correo concepto.
Xml es extremadamente fácil de crear y analizar en C#.
No mencionó la razón de guardar EML. Si el archivado a largo plazo sería un objetivo, xml podría tener una ventaja.
- 1. Cargando archivos .eml en javax.mail.Messages
- 2. Recomendaciones sobre el análisis de archivos .eml en C#
- 3. Cómo guardar el objeto MailMessage en el disco como archivo * .eml o * .msg
- 4. Lista de archivos guardados en el almacenamiento interno
- 5. Abrir archivos .eml en el modo de composición en Outlook 2010
- 6. Biblioteca PHP para generar archivos de correo electrónico EML?
- 7. Nginx proxy de archivos en el disco local o S3
- 8. Almacenar archivos en disco o MongoDB
- 9. ¿Cómo escanear archivos realmente grandes en el disco?
- 10. La mejor manera de almacenar muchos archivos en el disco
- 11. Programa para abrir archivos .fig guardados por Matlab
- 12. Enviar archivo escribe en el búfer en memoria (fopen algo, pero escribir para amortiguar, no disco)
- 13. Detener los archivos de registro PostgreSQL de llenar el disco
- 14. ¿Cómo obtener información sobre el sistema de archivos del disco?
- 15. MKMapView Mostrar Guardados incorrectamente región
- 16. Guardar nsdate en el disco
- 17. Guardar NSMutableArray en el disco
- 18. ¿Cómo descargar archivos directamente al disco en el sistema operativo del iPhone?
- 19. ¿Dónde guarda TortoiseSVN los archivos guardados en la memoria caché en Windows 7?
- 20. ¿Cómo enviar archivos XML para el cliente en ASP.NET MVC
- 21. Cómo enviar archivos con node.js
- 22. Crear un archivo .eml (correo electrónico) en Java
- 23. ¿Cómo escribir un correo electrónico en el disco en lugar de enviarlo a una dirección real en asp.net?
- 24. API de archivos HTML5 readAsBinaryString lee archivos mucho más grandes, diferentes a los archivos en el disco
- 25. ¿Cómo detectar datos no guardados en el formulario cuando el usuario abandona la página?
- 26. Los proyectos en el Navegador de proyectos han desaparecido, pero permanecen en el disco
- 27. ¿Cómo calcular el espacio libre en el disco?
- 28. Boost asio Boost: forma más rápida de leer archivos desde el disco duro?
- 29. Datos de sesión PHP no guardados
- 30. ¿Cómo guardo los archivos en el disco duro en un hilo separado?
El código provisto no maneja vistas alternativas o archivos adjuntos. El artículo vinculado especifica que está obsoleto y enlaza con otro (http://www.codeproject.com/KB/office/EML_ReaderEx.aspx) que maneja mejor las vistas alternativas y los archivos adjuntos, pero todavía tiene algunos problemas (el BCC parece estar restaurado incorrectamente como destinatario "a") – iammichael
Sí, lo sé. Solo estaba tratando de ayudar a alguien más (como yo) que se encuentra con esto cuando intenta encontrar una solución al mismo problema. Véase también la pregunta relacionada: http://stackoverflow.com/questions/936422/recommendations-on-parsing-eml-files-in-c – iammichael