Outlook GetItemFromID()始终返回Null

时间:2015-02-26 08:49:31

标签: c# email outlook add-in

我目前正在使用VS 2013为MS Outlook 2010开发一个加载项。我正在使用NewMailEx事件处理程序为我提供新电子邮件到达的EntryID。

获取EntryIDCollection没有问题(我确保它在进一步移动之前是单个EntryID),但是我无法使用给定的ID来查找实际的电子邮件对象(使用GetItemFromID())以便我可以访问新电子邮件的正文。相反,我在调用GetItemFromID()之后最终得到一个空的MailItem对象。

public static Outlook.NameSpace olNameSpace;
...
//EVENT: Item Received (new email arrival)
    private static void outLookApp_NewMailEx(string EntryIDCollection)
    {
        try
        {
            //THIS part is failing \/ and returning nothing
            object item = olNameSpace.GetItemFromID(EntryIDCollection, Type.Missing);
            Outlook.MailItem mailItem = item as Outlook.MailItem;

            if (mailItem != null)
            {                    
                //access email object
            }
        }
        catch (Exception e)
        {
            MessageBox.Show("Receive mail exception: " + e);
        }
    }

我是否需要为GetItemFromID()指定文件夹,即使它是可选的?

我可以访问其他进程来访问新的电子邮件,但我暂时只使用NewMailEx来创建一个简单的运行示例。

谢谢大家。

4 个答案:

答案 0 :(得分:0)

机智,

传递给GetItemFromID方法的实际值是多少?

  

我是否需要为GetItemFromID()指定文件夹,即使它是可选的?

不,没有必要指定第二个参数。这是可选的。

我建议您阅读以下一系列与Outlook中处理传入电子邮件相关的文章:

答案 1 :(得分:0)

您确定GetItemFromID返回null吗?如果出现问题,则会引发异常,而不是返回null。将返回的对象强制转换为Outlook.MailItem mailItem = item as Outlook.MailItem时,很可能是下一行(null)返回MailItem

确保您没有处理ReportItemMeetingItem个对象。

答案 2 :(得分:0)

感谢大家的帮助。

最终,我无法让GetItemFromID方法与NewMailEx一起使用。

但是,我建议在此处实施Eugene的推荐:

  

https://www.add-in-express.com/creating-addins-blog/2011/11/10/outlook-newmail-custom-solution/

这种一致的文件夹扫描效果非常好(在我的实验中具有100%的可靠性)。但是,如果您在使用Outlook时遇到任何延迟,我建议增加同步延迟时间,并可能使用Folder.Items.ItemAddFolders.FolderAdd/FolderChange/FolderRemove等事件处理程序来检查同步。

我的插件需要确保快速处理新电子邮件(用于链接的安全扫描),因此它不能仅仅在同步之间等待(如果在用户到达之前未扫描链接),这就是为什么我推荐那些其他的事件处理程序。

再次感谢, 〜B-威蒂

答案 3 :(得分:0)

这里的问题是没有初始化的对象olNameSpace。试试这个:

  create_table "posts", force: :cascade do |t|
    t.string   "title"
    t.text     "body"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.integer  "user_id"
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
  end