0
MailMessageをMIME文字列に変換する方法については、いくつかのStackOverflowの記事をたどってきました。これまでのところ、私はそれを働かせることができません。私はすべてのエラーと詳細については.NET 4.5で得ていますが、何らかの理由で私の文字列が空で、ストリームの長さが常に0になっています。関数へMailMessageからMIME Stringへ
コール:
MailMessage message = new MailMessage("[email protected]", "[email protected]", "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;
}
なぜ実行時にMailWriterアセンブリをロードしようとしていますか? –
私は研究からわかる限り、これは組み込みのMailMessageクラスから生のMIMEテキストを抽出する唯一の方法です。私の理解では、この仕組みはメールメッセージ内にプライベートメソッドがあり、それを生のフォーマットとしてストリームに保存できますが、プライベートでMicrosoftから公開されていないので、それを呼び出す唯一の方法は反映です。 – Kyle
[MimeKit](http://www.mimekit.net/)を使用する方法もあります。ストリームに書き込むための簡単なメソッドがあります。 – Mats391