【问题标题】:how to copy mailitem in outlook c#如何在outlook c#中复制mailitem
【发布时间】:2014-10-12 01:53:00
【问题描述】:

我正在编写一个 Outlook 插件, 我需要在收到电子邮件时,正常进入默认收件箱文件夹,但它会复制收到的电子邮件并将其放入另一个文件夹(例如垃圾文件夹)。 但我遇到异常“无法移动项目”。我一直在移动电子邮件的副本。有什么想法吗?

private void items_ItemAdd(object Item)
 {


    Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)
    this.Application.ActiveExplorer().Session.GetDefaultFolder
    (Outlook.OlDefaultFolders.olFolderInbox);


    // the incoming email
    Outlook.MailItem mail = (Outlook.MailItem)Item;
    //make a copy of it but error occurs
    Outlook.MailItem cItem = mail.copy();
    //
    cItem = (Outlook.MailItem)cItem.Move((Outlook.MAPIFolder)
    this.Application.ActiveExplorer().Session.GetDefaultFolder
    (Outlook.OlDefaultFolders.olFolderJunk));

【问题讨论】:

    标签: c# outlook mailitem


    【解决方案1】:

    您在 ItemAdd 事件处理程序中。尝试将项目的条目 ID 存储在变量或列表中并启动计时器(使用 Forms 命名空间中的计时器)。当时间触发时,您将退出事件处理程序并且应该能够调用 MailItem.Move。

    【讨论】:

    • 谢谢 Dmitry,你的意思是我不能在 ItemAdd 事件处理程序中移动邮件项吗?实际上,我想根据邮件主题将邮件存储在不同的文件夹中,我该怎么做呢?
    • 如果您调用 Move,Outlook 传递给事件处理程序的项目将变为无效。您可以将逻辑移至计时器事件处理程序。
    • 那么我如何制作该电子邮件的副本并将原始电子邮件和副本存储到不同的文件夹中?计时器是这样做的唯一方法吗?谢谢
    • 复制(与移动不同)应该没问题:调用 MailItem.Copy,然后在返回的项目上调用 MailItem.Move。
    • 我的意思是,如果您接受我的建议并将条目 ID 存储在一个列表中,以便在时间事件触发时进行处理。这样,您可以在有机会处理它们之前多次处理 ItemAdd 事件触发。
    猜你喜欢
    • 2019-06-08
    • 2015-12-11
    • 1970-01-01
    • 2015-04-29
    • 2012-12-05
    • 2017-03-14
    • 1970-01-01
    • 2019-07-08
    • 2016-10-30
    相关资源
    最近更新 更多