c# - 在 .NET 4.5 beta 中获取 System.Net.Mail.MailMessage 作为 MemoryStream

标签 c# .net-4.5

因此,以下代码用于在 .NET 4 中获取 System.Net.Mail.MailMessage 对象作为 MemoryStream,但是随着 .NET 4.5 beta 的发布,出现了运行时异常。

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() 发生运行时异常。

最佳答案

设法弄清楚如何在 .NET 4.5 beta 中让它再次工作。 MailMessage 中的私有(private) API Send() 方法已更改为: internal void Send(BaseWriter writer, bool sendEnvelope, bool allowUnicode)

请在下面找到更新的代码。

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);

    .....
}

关于c# - 在 .NET 4.5 beta 中获取 System.Net.Mail.MailMessage 作为 MemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595440/

相关文章:

c# - 在异步方法 .net 4.5 中管理同步调用

c# - 使用默认值从 SelectList 创建 DropDownListFor

c# - WPF 组合框 : Different template in textbox and drop-downlist

c# - ASP.NET MVC 4 : error when making Ajax call to controller to update SQL Server database

c# - 我可以数数吗? access 数据库中的列数?

c# - 何时使用 "await"关键字

c# - 一种根据从应用程序创建的中心磁贴导航到不同页面的方法

c# - 反 xsrf token 验证失败

jquery - ASP.NET 请求和 .NET 4.5 - 奇怪的行为

c# - 启用 native 代码调试时,AccessViolationException 消失