2016-12-22 2 views
1

Основное требование, которое я выполняю, - прочитать миллионы старых писем и опубликовать их в нашей новой системе для правильного архивирования. Сама задача состоит в том, чтобы прочитать файл .eml и добавить новый адрес электронной почты BCC, а затем отбросить новый файл электронной почты на определенный SMTP-сервер, который направляется на смарт-хост, который затем архивирует электронную почту, не входя в реальный мир ,C# .EML resending с новым адресом - Дата выпуска

Проблема заключается в том, что когда я вызываю метод .Send(), штамп даты - это текущая дата, а не дата исходного письма. Я попытался использовать как Smtp.MailMessage, так и CDO.Message. ни один из них не имеет никакого свойства «даты», которое может быть установлено, поскольку CDO.MessageClass имеет SentOn, который доступен только для чтения. Является ли это чем-то возможным в рамках стандартных фреймворков, которые мне не хватает, мне нужно реализовать свой собственный MessageClass, или я должен вручную изменить существующий файл .eml в виде текстового файла или использовать альтернативу, такую ​​как Afterlogic MailBee?

Примечание: это не злонамеренное намерение попытаться создать резервную копию отдельного электронного письма, это проект реального мира. Я искал другие темы, такие как тот, под которым я не могу найти ответ. How can I send an e-mail with a past date from .NET?

ответ

1

Это довольно просто, используя MimeKit пакет:

string outputDirectory = "out"; // or whatever the output path is 
foreach (var file in Directory.EnumerateFiles(workingDirectory, "*.eml")) 
{ 
    var message = MimeMessage.Load(file); 
    message.Bcc.Add(new MailboxAddress("[email protected]")); 
    string outputFile = Path.Combine(outputDirectory, Path.GetFileName(file)); 
    message.WriteTo(outputFile); 
} 
+1

Спасибо вам Майк. Я знал, что для этого должен быть какой-то сторонний комплект. Это работает даже лучше MailBee и ничего не стоит. Ты только что спас мне 400 долларов и головную боль :-) –