Вот метод расширения для преобразования MailMessage в поток, содержащий данные EML. Его явно немного взломать, поскольку он использует файловую систему, но он работает.
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);
}
}
}
Вы можете взять поток Thats возвратили и делать, как вы хотите с ним, в том числе сохранение в другое место на диске или хранить в поле базы данных, или даже по электронной почте в качестве вложения.
Я обнаружил, что мне нужно, чтобы добавить <сетевой хост = «...» и т.д., в дополнение к тому, что при условии, Райан , –
Есть ли способ изменить имя файла выходного файла .eml? Я бы предпочел, чтобы это не выглядело так: f80f4695-551c-47d7-8879-40ad89707b23.eml Спасибо! – buzzzzjay
Хотя старый пост, я хотел бы добавить ответ на последний вопрос из @buzzzzjay: посмотрите здесь: [link] (http://www.codeproject.com/Articles/32434/Adding-Save-functionality- to-Microsoft-Net-Mail-Ma) –