我目前正在使用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来创建一个简单的运行示例。
谢谢大家。
答案 0 :(得分:0)
机智,
传递给GetItemFromID方法的实际值是多少?
我是否需要为GetItemFromID()指定文件夹,即使它是可选的?
不,没有必要指定第二个参数。这是可选的。
我建议您阅读以下一系列与Outlook中处理传入电子邮件相关的文章:
答案 1 :(得分:0)
您确定GetItemFromID
返回null
吗?如果出现问题,则会引发异常,而不是返回null
。将返回的对象强制转换为Outlook.MailItem mailItem = item as Outlook.MailItem
时,很可能是下一行(null
)返回MailItem
。
确保您没有处理ReportItem
或MeetingItem
个对象。
答案 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.ItemAdd
和Folders.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