小编mdi*_*l13的帖子

VSTO:在outlook规则移动邮件之前使用newmailex处理邮件

我正在为Outlook 2007创建一个插件,在收到邮件时读取它,然后重写它.插件工作得很好,并为没有将其移动到另一个文件夹的Outlook规则的项重写邮件.如果有规则,大约50%的时间仍然可以.另外50%的时间,规则会在我的插件完成之前移动邮件项目.我收到以下错误:

"由于对象已被删除,因此无法执行操作."

我正在使用NewMailEx事件来调用我的重写函数:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.NewMailEx += new Outlook.ApplicationEvents_11_NewMailExEventHandler(olApp_NewMail);
}
Run Code Online (Sandbox Code Playgroud)

在Outlook 2007中,NewMailEx为邮件提供了entryID.此entryID最初用于确定要使用的邮件对象:

Outlook.NameSpace outlookNS = this.Application.GetNamespace("MAPI");
Outlook.MAPIFolder mFolder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.MailItem mail;
try
{
    mail = (Outlook.MailItem)outlookNS.GetItemFromID(entryIDCollection, Type.Missing);
}
catch (Exception e) { Debug.WriteLine("exception with non-mail item " + entryIDCollection + ": " + e.ToString()); return; }
Run Code Online (Sandbox Code Playgroud)

我认为我可以使用这个entryID(上面的代码可以工作),并遍历我的所有文件夹(在交换机上和我的计算机上),寻找相同的邮件ID.当我最终迭代到邮件所在的位置时,移动邮件的EntryID与entryIDCollection非常不同.

也许我会以错误的方式解决这个问题.有谁知道如何阻止事件传播直到我完成,或者如何追踪移动的电子邮件?

这是我的代码遍历文件夹,万一有人好奇:

        try
        {
            mail.Subject = new_subj;
            mail.Body = "";
            mail.HTMLBody = text;
            mail.ClearConversationIndex();
            mail.Save();
        }
        catch (Exception ex)
        {
            //It wasn't caught in time, so …
Run Code Online (Sandbox Code Playgroud)

outlook vsto

8
推荐指数
2
解决办法
5024
查看次数

标签 统计

outlook ×1

vsto ×1