сохраните Систему. Net.mail. MailMessage как .msg файл

Я создаю приложение, где я обязан создать MailMessage (Система. Net.mail. MailMessage), и сохраняют его на диске как .msg расширение не .eml

Ниже метод, который я использую для сохранения MailMessage как .msg файл:

   public static void Save(MailMessage Message, string FileName)
    {
        Assembly assembly = typeof(SmtpClient).Assembly;
        Type _mailWriterType =
          assembly.GetType("System.Net.Mail.MailWriter");

        using (FileStream _fileStream =
               new FileStream(FileName, FileMode.Create))
        {
            // Get reflection info for MailWriter contructor
            ConstructorInfo _mailWriterContructor =
                _mailWriterType.GetConstructor(
                    BindingFlags.Instance | BindingFlags.NonPublic,
                    null,
                    new Type[] { typeof(Stream) },
                    null);

            // Construct MailWriter object with our FileStream
            object _mailWriter =
              _mailWriterContructor.Invoke(new object[] { _fileStream });

            // Get reflection info for Send() method on MailMessage
            MethodInfo _sendMethod =
                typeof(MailMessage).GetMethod(
                    "Send",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            // Call method passing in MailWriter
            _sendMethod.Invoke(
                Message,
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new object[] { _mailWriter, true },
                null);

            // Finally get reflection info for Close() method on our MailWriter
            MethodInfo _closeMethod =
                _mailWriter.GetType().GetMethod(
                    "Close",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            // Call close method
            _closeMethod.Invoke(
                _mailWriter,
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new object[] { },
                null);
        }
    }

Но сохраненный файл сообщений не открывается, и ниже ошибка: "Не может открыть файл xyz.msg. Файл файла не может существовать, у Вас не может быть разрешения открыть его, или это может быть открыто другой программой...."

Мой вопрос: Как сохранить Систему. Net.mail. MailMessage как файл сообщений?

11
задан Martin Vobr 21 September 2010 в 16:06
поделиться

2 ответа

Если вы имеете в виду файл Outlook .msg, это невозможно сделать в .NET.

Файл .msg Outlook представляет собой составной документ, поэтому вам нужно сохранить его в этом формате и обязательно поместить все соответствующие свойства в их точные места.

Вам нужно написать собственное, использовать стороннее приложение или, возможно, Outlook.

Извините,

Дэйв

2
ответ дан 3 December 2019 в 09:19
поделиться

Здесь Райан предлагает простой и отличный способ сделать это без каких-либо усилий.

Вы можете настроить SmtpClient для отправки электронных писем в файловую систему, а не в сеть. Вы можете сделать это программно, используя следующий код:

SmtpClient client = new SmtpClient("mysmtphost");
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = @"C:\somedirectory";
client.Send(message);

Вы также можете настроить это в файле конфигурации вашего приложения следующим образом:

 <configuration>
     <system.net>
         <mailSettings>
             <smtp deliveryMethod="SpecifiedPickupDirectory">
                 <specifiedPickupDirectory pickupDirectoryLocation="C:\somedirectory" />
             </smtp>
         </mailSettings>
     </system.net>
 </configuration>
4
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: