2017-05-24 37 views
0

我已經關注瞭如何將MailMessage轉換爲MIME字符串的幾個StackOverflow帖子。到目前爲止,我無法完成它的工作。我已經解決了.NET 4.5的所有錯誤和細節,但由於某些原因,我的字符串是空的,並且我的流長度始終爲0.任何幫助將不勝感激。MailMessage到MIME字符串

電話功能:

MailMessage message = new MailMessage("[email protected]", "[email protected]", "Test", "Test"); 
Console.WriteLine(ConvertMailMessageToMemoryStream(message)); 

功能代碼:

private static string ConvertMailMessageToMemoryStream(MailMessage message) 
    { 
     BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic; 
     Assembly assembly = typeof(SmtpClient).Assembly; 
     Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter"); 
     MemoryStream stream = new MemoryStream(); 
     ConstructorInfo mailWriterConstructor = mailWriterType.GetConstructor(flags, null, new[] { typeof(Stream) }, null); 
     object mailWriter = mailWriterConstructor.Invoke(new object[] { stream }); 
     MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", flags); 
     sendMethod.Invoke(message, flags, null, new[] { mailWriter, true, true }, null); 
     var sr = new StreamReader(stream); 
     var str = sr.ReadToEnd(); 
     MethodInfo closeMethod = mailWriter.GetType().GetMethod("Close", flags); 
     closeMethod.Invoke(mailWriter, flags, null, new object[] { }, null); 
     return str; 
    } 
+0

爲什麼你要在運行時加載MailWriter程序集?) –

+0

據我所知,從研究中可以看出,這是從構建的MailMessage類中提取原始MIME文本的唯一方法。根據我的理解,這樣做的方式是在郵件消息中存在一種私有方法,它允許我們將其作爲原始格式保存到流中,但由於它是私有的並且未被Microsoft公開,調用它的唯一方法是通過反射。 – Kyle

+0

另一種方法是使用[MimeKit](http://www.mimekit.net/)。這有簡單的方法來寫入流 – Mats391

回答

1

您在閱讀之前尋求流開始。 stream.Seek(0, SeekOrigin.Begin) sendMethod將指針留在最後,因此您無法從中讀取任何內容。