我试图在 .NET 中获取 MailMessage 以返回 MIME 消息的字符串,但这在传递的类中没有提供。关于如何创建 C# 扩展方法来猴子修补类以提供功能还有另一个很好的答案。我正在尝试使用类型扩展将其移植到 F#,但我对如何提供参数感到困惑(特别是考虑到其中一个参数是 F# 关键字)。
非常感谢您解释如何通过答案正确完成此操作。
这是我到目前为止所得到的(当然,目前还不能编译):
open System.Net.Mail
module MailExtension =
type MailMessage with
member this.toEml mail =
let stream = new MemoryStream();
let mailWriterType = mail.GetType().Assembly.GetType("System.Net.Mail.MailWriter");
let mailWriter = Activator.CreateInstance(
type: mailWriterType,
bindingAttr: BindingFlags.Instance | BindingFlags.NonPublic,
binder: null,
args: new object[] { stream },
culture: null,
activationAttributes: null)
mail.GetType().InvokeMember(
name: "Send",
invokeAttr: BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
binder: null,
target: mail,
args: new object[] { mailWriter, true, true });
Encoding.UTF8.GetString(stream.ToArray());