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());
            }
        }
Esempio n. 2
0
 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);
     }
 }