我正在构建一个应用程序,我有义务创建一个MailMessage(System.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);
}
}
但是保存的msg文件没有打开,下面是错误: “无法打开文件xyz.msg。文件文件可能不存在,您可能没有权限打开它,或者它可能被另一个程序打开....”
我的问题是:如何将System.Net.mail.MailMessage保存为msg文件?
答案 0 :(得分:4)
Here Ryan提出了一个简单而有效的方法,无需任何努力。
您实际上可以配置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>
答案 1 :(得分:3)
如果您指的是Outlook MSG文件格式,请检查MSG format specification published by Microsoft。回答similar question后也可能有帮助。
答案 2 :(得分:2)
如果您指的是Outlook .msg文件,则无法在.NET中本机完成此操作。
Outlook .msg文件是一个复合文档,因此,您需要以该格式保存它,并确保将所有相应的属性放在其确切位置。
您需要自己编写,使用第三方或可能的Outlook互操作。
对不起,
戴夫
答案 3 :(得分:2)
查看使用Outlook Interop库Creating an Outlook Message File with C# 的这个简短示例。这并不是你要求的,但有一种方法可以将值从一个复制到另一个 - 手动。
答案 4 :(得分:1)
Microsoft支持KB文章: INFO: Save Message to MSG Compound File
答案 5 :(得分:0)
Outlook提供的错误消息是因为 .msg 扩展名。我使用相同的方法将MailMessage对象保存到磁盘,并发现该文件只能在Outlook中打开,扩展名为 .eml 。