获取System.Net.Mail.MailMessage作为一个MemoryStream在.NET 4.5 Beta版 [英] Getting System.Net.Mail.MailMessage as a MemoryStream in .NET 4.5 beta
问题描述
所以,下面的code使用.NET 4的合作,以获得一个System.Net.Mail.MailMessage对象作为一个MemoryStream,但与.NET 4.5测试版运行时异常发生的释放。
So, the below code used to work in .NET 4 to get a System.Net.Mail.MailMessage object as a MemoryStream, however with the release of .NET 4.5 beta a runtime exception occurs.
Assembly assembly = typeof(SmtpClient).Assembly;
Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
using (MemoryStream stream = new MemoryStream())
{
ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true }, null);
.....
}
发生在sendMethod.Invoke()
运行时异常。
Runtime exception occurs on sendMethod.Invoke().
推荐答案
管理弄清楚如何得到这个在.NET 4.5 Beta版再次合作。 MAILMESSAGE中的私有API send()方法已更改为:内部空间发送(BaseWriter作家,布尔sendEnvelope,布尔allowUni code)
Managed to figure out how to get this working again in .NET 4.5 beta. The private API Send() method in MailMessage has changed to: internal void Send(BaseWriter writer, bool sendEnvelope, bool allowUnicode)
请在下面找到更新code。
Please find updated code below.
Assembly assembly = typeof(SmtpClient).Assembly;
Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
using (MemoryStream stream = new MemoryStream())
{
ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true, true }, null);
.....
}
这篇关于获取System.Net.Mail.MailMessage作为一个MemoryStream在.NET 4.5 Beta版的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!