Aquí hay un método de extensión para convertir un MailMessage a una secuencia que contiene los datos EML. Obviamente es un poco un truco ya que utiliza el sistema de archivos, pero funciona.
public static void SaveMailMessage(this MailMessage msg, string filePath)
{
using (var fs = new FileStream(filePath, FileMode.Create))
{
msg.ToEMLStream(fs);
}
}
/// <summary>
/// Converts a MailMessage to an EML file stream.
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public static void ToEMLStream(this MailMessage msg, Stream str)
{
using (var client = new SmtpClient())
{
var id = Guid.NewGuid();
var tempFolder = Path.Combine(Path.GetTempPath(), Assembly.GetExecutingAssembly().GetName().Name);
tempFolder = Path.Combine(tempFolder, "MailMessageToEMLTemp");
// create a temp folder to hold just this .eml file so that we can find it easily.
tempFolder = Path.Combine(tempFolder, id.ToString());
if (!Directory.Exists(tempFolder))
{
Directory.CreateDirectory(tempFolder);
}
client.UseDefaultCredentials = true;
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = tempFolder;
client.Send(msg);
// tempFolder should contain 1 eml file
var filePath = Directory.GetFiles(tempFolder).Single();
// stream out the contents
using (var fs = new FileStream(filePath, FileMode.Open))
{
fs.CopyTo(str);
}
if (Directory.Exists(tempFolder))
{
Directory.Delete(tempFolder, true);
}
}
}
, entonces puede tomar la corriente de eso regresaron y hacer lo que quiera con él, incluyendo el ahorro a otra ubicación en el disco o almacenamiento en un campo de base de datos, o incluso enviando un correo electrónico como archivo adjunto.
me he dado cuenta que yo también tenía que añadir el
¿Hay alguna forma de cambiar el nombre del archivo de salida .eml? Preferiría que no se pareciera a lo siguiente: f80f4695-551c-47d7-8879-40ad89707b23.eml ¡Gracias! – buzzzzjay
Aunque una publicación anterior, me gustaría añadir una respuesta a la última pregunta de @buzzzzjay: echa un vistazo aquí: [link] (http://www.codeproject.com/Articles/32434/Adding-Save-functionality- to-Microsoft-Net-Mail-Ma) –