如何使用Interop修改现有的Outlook .msg文件而不保存到Outlook收件箱

时间:2013-11-06 18:32:16

标签: c# .net email outlook office-interop

我创建了以下类来打开光盘上的现有Outlook .msg文件(“模板”),更改一些属性,添加附件并将其保存回另一个位置的光盘。但是,当我打开Outlook时,除了保存位置之外,我的收件箱中还会出现一个新文件!我根本不想保存到任何Outlook文件夹,只需修改磁盘上的文件即可。如何防止它保存到我的收件箱?

public class OutlookMailManager
{
    public const string OutlookExtn = ".msg";

    public void GenerateMail(string toAddress, string fromAddress, string templateFile, string outputFile, string attachmentFile)
    {
        MailItem item = OpenMessage(templateFile);
        item.To = toAddress;
        item.SentOnBehalfOfName = fromAddress;
        item.Attachments.Add(attachmentFile);
        SaveMessage(outputFile, item);
    }

    private MailItem OpenMessage(string fileName)
    {
        var app = new Application();
        return (MailItem)app.Session.OpenSharedItem(fileName);
    }

    private void SaveMessage(string fileName, MailItem item)
    {
        fileName = Path.ChangeExtension(fileName, OutlookExtn);
        item.SaveAs(fileName, OlSaveAsType.olMSG);
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用扩展MAPI(仅限C ++或Delphi)和OpenIMsgOnIStg函数或Redemption(任何语言) - 创建RDOSession对象的实例,调用RDOSession.GetMessageFromMsgFile(返回RDOMail对象的一个​​实例,修改它,调用RDOMail.Save或RDOMail.SaveAs。