获取System.Net.Mail.MailMessage作为一个MemoryStream在.NET 4.5 Beta版 [英] Getting System.Net.Mail.MailMessage as a MemoryStream in .NET 4.5 beta

查看:187
本文介绍了获取System.Net.Mail.MailMessage作为一个MemoryStream在.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆