我已经关注了一些有关如何将MailMessage转换为MIME字符串的StackOverflow帖子。到目前为止,我无法让它发挥作用。我已经解决了.NET 4.5中的所有错误和细节,但由于某种原因,我的字符串为空,我的流长度始终为0.任何帮助都将不胜感激。
致电功能:
MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "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 :(得分:1)
在阅读之前,您必须先查找流。
stream.Seek(0, SeekOrigin.Begin)
sendMethod
将指针留在末尾,因此您无法从中读取任何内容。