为了账号安全,请及时绑定邮箱和手机立即绑定

未始终触发 Outlook ItemAdd 事件

未始终触发 Outlook ItemAdd 事件

C#
慕慕森 2022-12-24 12:13:06
我正在尝试确定收到的邮件是否是垃圾邮件。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;    }}当我给自己发送邮件时,“我在”和“我在预测函数中”只在调试控制台中显示一次。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

首先,您的代码无法编译——对象上没有ItemAdd事件MAPIFolder。它由Items对象公开(从MAPIFolder.Items属性返回)。

其次,引发事件 ( Items) 的对象必须保持活动状态 - 在类级别声明它,而不是作为局部变量,在ThisAddIn_Startup方法退出时由垃圾收集器释放。


查看完整回答
反对 回复 2022-12-24
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

工作代码就像


 public partial class ThisAddIn

 {

    Outlook.Items items=null;

private void ThisAddIn_Startup(object sender, System.EventArgs e)

{

     Outlook.MAPIFolder inbox = 

    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

    items=inbox.Items;

    items.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;

 }

}


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号