public static byte[] ToArray(this MailMessage msg) { const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; using (var ms = new MemoryStream()) { var assembly = typeof(System.Net.Mail.SmtpClient).Assembly; var writerType = assembly.GetType("System.Net.Mail.MailWriter"); var writer = Activator.CreateInstance(writerType, flags, null, new object[] { ms }, CultureInfo.InvariantCulture); msg.GetType().GetMethod("Send", flags).Invoke(msg, new[] { writer, true }); return(ms.ToArray()); } }
private static void SaveToEml(MailMessage msg, string emlFileAbsolutePath) { using (MemoryStream stream = new MemoryStream()) { object obj2 = Activator.CreateInstance(typeof(SmtpClient).Assembly.GetType("System.Net.Mail.MailWriter"), BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { stream }, CultureInfo.InvariantCulture); msg.GetType().GetMethod("Send", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance).Invoke(msg, new object[] { obj2, true }); File.WriteAllText(emlFileAbsolutePath, Encoding.Default.GetString(stream.ToArray()), Encoding.UTF8); } }