0

我在 .NET 3.5、Visual Studio 2010 中工作。我正在开发一个 Outlook 加载项,它将一些电子邮件保存到一个文件夹中。我已经使用该Microsoft.Office.Interop.Outlook.MailItem.SaveAs功能使其工作。但是,文件属性只有当前时间(通过加载项导出文件的时间)作为其修改日期/创建日期等,而其他属性如 To、From、CC、BCC 不存在。

如果您在 Windows 资源管理器中打开一个文件夹(我使用的是 Windows 7),转到顶部显示名称、修改日期、类型等的位置,您可以单击更多,然后查看其他可能相关的列,例如“专辑艺术家”、“收件人”、“发件人”等。

C# 有一个非常简单的方法来修改时间,File.SetCreationTime(filename, DateTime object);. 但是,没有 .SetTo 或 .SetAlbumArtist 或类似的东西。我将如何修改这些属性?

更新1:通过研究,我发现了这个链接:Read/Write 'Extended' file properties (C#),所以它可能包含答案......但我不知道怎么做。接受的答案提到使用 .dll 在 shell 上运行方法。第二个答案包含 C# 代码,然后评论者基本上问我想知道什么(如何修改特定文件的属性),下一个评论者回答“你不能设置这些”......所以我仍然在 1 号广场。

更新 2:我还尝试了以下方法:

foreach (Object selectedObject in explorer.Selection)
{
     Outlook.MailItem email = (selectedObject as Outlook.MailItem);
     //Modify the information about the email
     email.To = "I filled in To";
     email.SaveAs(filename, OlSaveAsType.olMSG);
}

此代码成功抓取选定的电子邮件并将它们保存在文件名下。但是,当您打开 .msg 时,email.To = "I packed in To" 会更改信息,但不会更改文件属性。

4

1 回答 1

1

这无法更改,因为它实际上不是文件系统方面的任何文件属性(如文件创建或修改日期时间)。

您所说的 Windows 资源管理器中的列是“虚拟的”,它们“只是”Windows 资源管理器的功能。它“理解”某些文件类型的内容,并且可以处理这样的显示和排序列。

如果您想更改收件人、发件人等,您必须更改正在保存的文件的内容,即更改消息中的收件人或发件人。

为此,如果您有一个 Microsoft.Office.Interop.Outlook.MailItem 对象(您只是保存),请在将其保存到文件之前在该对象上设置所需的属性,即:

MailItem mail = ...;
mail.To = "some new to";
mail.Subject = "new subject";
mail.SaveAs(fileToSave, OlSaveAsType.OlMSG);

我不知道它是否还会更改存储在 Outlook 中的电子邮件,如果是,请在更改属性之前创建电子邮件的副本

MailItem copyOfMailToSave = (MailItem)mail.Copy();
于 2012-07-12T18:09:10.747 回答