MailMessage 到 MIME 字符串

MailMessage to MIME String

我关注了一些关于如何将 MailMessage 转换为 MIME 字符串的 Whosebug 帖子。到目前为止,我只是无法让它工作。我已经解决了 .NET 4.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.Seek(0, SeekOrigin.Begin) sendMethod 将指针留在末尾,因此您无法从中读取任何内容。