gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:09 24 4
gpt4 key购买 nike

因此,下面的代码用于在 .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/25376075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com