Alpinely.TownCrier.MailMessageExtensions.SaveCLR C# (CSharp) Method

SaveCLR() private static method

private static SaveCLR ( MailMessage message, Stream outputStream, MethodInfo sendMethod ) : void
message System.Net.Mail.MailMessage
outputStream Stream
sendMethod System.Reflection.MethodInfo
return void
        private static void SaveCLR(MailMessage message, Stream outputStream, MethodInfo sendMethod)
        {
            // Unfortunately we have to use reflection because of poorly designed .NET framework components

            Assembly assembly = typeof(SmtpClient).Assembly;
            Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");

            // Get reflection info for MailWriter contructor
            var mailWriterContructor = mailWriterType.GetConstructor(
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new[] { typeof(Stream) },
                null);

            // Construct MailWriter object with our FileStream
            object mailWriter = mailWriterContructor.Invoke(new object[] { outputStream });

            var methodParams = sendMethod.GetParameters().Length == 2
                                   ? new[] { mailWriter, true } // .NET 4.0 (and earlier?)
                                   : new[] { mailWriter, true, true }; // .NET 4.5 has an additional parameter

            // Call method passing in MailWriter
            sendMethod.Invoke(
                message,
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                methodParams,
                null);
        }
MailMessageExtensions