本文介绍了Outlook ItemAdd事件未一致触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试确定传入的邮件是否为垃圾邮件。ItemAdd事件只工作一次。它不会始终如一地触发。
如何解决此问题?
我执行以下操作:
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Outlook.MAPIFolder inbox = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
inbox.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(InboxFolderItemAdded);
}
private void InboxFolderItemAdded(object Item)
{
if (Item is Outlook.MailItem)
{
Debug.WriteLine("I'm in!");
Outlook.MailItem mail = (Outlook.MailItem)Item;
int[] answer = Predict(mail);
if(answer[0] == 0) // Not spam
{
Outlook.MAPIFolder inboxFolder = ((Outlook.MAPIFolder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox));
mail.Move(inboxFolder);
}
else if(answer[0] == 1) // Spam
{
Outlook.MAPIFolder junkFolder = ((Outlook.MAPIFolder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderJunk));
mail.Move(junkFolder);
}
}
}
private int[] Predict(Outlook.MailItem mailBody)
{
Debug.WriteLine("I'm inside in predict function");
double[]feature = featureExtraction.findFeatureIncomingMail(mailBody.Body);
int[] answer = tree.Decide(feature);
return answer;
}
}
当我给自己发送邮件时,"我在"和"我在预测功能中"在调试控制台中只显示一次。
推荐答案
首先,您的代码不会编译-ItemAdd
对象上没有MAPIFolder
事件。它由Items
对象(从MAPIFolder.Items
属性返回)公开。
Items
)的对象必须保持活动状态-在类级别声明它,而不是将其声明为局部变量,该变量在ThisAddIn_Startup
方法退出时由垃圾收集器释放。
这篇关于Outlook ItemAdd事件未一致触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!