C# 邮件消息到MIME字符串

C# 邮件消息到MIME字符串,c#,mime,mailmessage,C#,Mime,Mailmessage,我跟随了一些StackOverflow帖子,介绍了如何将MailMessage转换为MIME字符串。到目前为止,我只是无法让它工作。我已经绕过了.NET4.5的所有错误和细节,但由于某些原因,我的字符串为空,流长度始终为0。任何帮助都将不胜感激 调用函数: MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "Test", "Test"); Console.WriteLine(ConvertMailM

我跟随了一些StackOverflow帖子,介绍了如何将MailMessage转换为MIME字符串。到目前为止,我只是无法让它工作。我已经绕过了.NET4.5的所有错误和细节,但由于某些原因,我的字符串为空,流长度始终为0。任何帮助都将不胜感激

调用函数:

MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "Test", "Test");
Console.WriteLine(ConvertMailMessageToMemoryStream(message));
功能代码:

    private static string ConvertMailMessageToMemoryStream(MailMessage message)
    {
        BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
        Assembly assembly = typeof(SmtpClient).Assembly;
        Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
        MemoryStream stream = new MemoryStream();
        ConstructorInfo mailWriterConstructor = mailWriterType.GetConstructor(flags, null, new[] { typeof(Stream) }, null);
        object mailWriter = mailWriterConstructor.Invoke(new object[] { stream });
        MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", flags);
        sendMethod.Invoke(message, flags, null, new[] { mailWriter, true, true }, null);
        var sr = new StreamReader(stream);
        var str = sr.ReadToEnd();
        MethodInfo closeMethod = mailWriter.GetType().GetMethod("Close", flags);
        closeMethod.Invoke(mailWriter, flags, null, new object[] { }, null);
        return str;
    }

在阅读之前,你必须从头开始寻找这条小溪。 stream.Seek0,SeekOrigin.Begin
sendMethod将指针保留在末尾,因此您无法从中读取任何内容。

为什么要尝试在运行时加载MailWriter程序集?根据研究,这是从内置MailMessage类中提取原始mime文本的唯一方法。据我所知,这种方法的工作原理是,邮件消息中有一个私有方法,允许我们将其作为原始格式保存到流中,但由于它是私有的,并且不是由Microsoft公开的,因此调用它的唯一方法是通过反射。另一种方法是使用。这有简单的写入流的方法。在读取流之前,您可能必须先查找开始的流。