Я создаю приложение, где я обязан создать 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 как файл сообщений?
Если вы имеете в виду файл Outlook .msg, это невозможно сделать в .NET.
Файл .msg Outlook представляет собой составной документ, поэтому вам нужно сохранить его в этом формате и обязательно поместить все соответствующие свойства в их точные места.
Вам нужно написать собственное, использовать стороннее приложение или, возможно, Outlook.
Извините,
Дэйв
Здесь Райан предлагает простой и отличный способ сделать это без каких-либо усилий.
Вы можете настроить 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>