none
请教outlook插件:如何修改outlook中已有的窗体和拦截处理分类事件 RRS feed

  • 问题

  • 比如要在mail分类的条件指定窗体中增加个复选框,实现思路是怎样的,能给个参考例子最好。多谢。
    下图是outlook中mail分类的条件指定窗体

    • 在我们能够验证您的帐户前,正文文本不能包含图片和链接。

    图暂时不能在正文里提交

    不需要修改窗体了,只要实现拦截到邮件进行分类(比如把从A发过来的邮件放到A文件夹里去)事件,在事件处理之前运行插件的动作,如果是符合条件的就进行插件的处理,如果不符合就默认原来的动作。

    这样怎么去实现呢,作为office插件能拦截和处理这样的消息吗?




    • 已编辑 LINZISO 2014年4月22日 8:54
    2014年4月22日 8:09

答案

  • 你好:

    欢迎来到MSDN中文论坛。

    VSTO没有这样内置事件供你调用,但是你可以换一种方式,使用NewMailEx事件,在接收到邮件之后进行一些处理。参考这篇英文帖子中的示例代码:

    Custom Action using a VSTO addin

    public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                Application.NewMailEx += new Outlook.ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);
    
            }
    
            void Application_NewMailEx(string EntryIDCollection)
            {
                //more than one new mail arrives
                string[] entryIDs = EntryIDCollection.Split(',');
                foreach (string entryID in entryIDs)
                {
                    if (DialogResult.Yes == MessageBox.Show("Do you want to save your new message?", "You have got a new mail", MessageBoxButtons.YesNo))
                    {
                        Outlook.NameSpace ns = Application.Session;
    
                        Outlook.MailItem newmail = ns.GetItemFromID(entryID, missing) as Outlook.MailItem;
                        if (newmail != null)
                        {
                            SaveAttachmentsToDisk(newmail);
                        }
                    }
                }
    
            }
            public void SaveAttachmentsToDisk(Outlook.MailItem message)
            {
                string rootPath = "C:\\Temp";
    
                foreach (Outlook.Attachment attachment in message.Attachments)
                {
                    string fileName = string.Format("{0}\\{1}", rootPath, attachment.FileName);
                    attachment.SaveAsFile(fileName);
                }
    
            }
    }

    这个实例代码的作用是在接收到一封或者多封邮件之后,将邮件中的附件保存到磁盘上。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 LINZISO 2014年4月25日 5:40
    2014年4月23日 7:07
    版主

全部回复

  • 现在的想法是这样的,不需要修改窗体了,只要实现拦截到邮件进行分类(比如把从A发过来的邮件放到A文件夹里去)事件,在事件处理之前运行插件的动作,如果是符合条件的就进行插件的处理,如果不符合就默认原来的动作。

    这样怎么去实现呢,作为office插件能拦截和处理这样的消息吗?

    2014年4月22日 8:52
  • 你好:

    欢迎来到MSDN中文论坛。

    VSTO没有这样内置事件供你调用,但是你可以换一种方式,使用NewMailEx事件,在接收到邮件之后进行一些处理。参考这篇英文帖子中的示例代码:

    Custom Action using a VSTO addin

    public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
                Application.NewMailEx += new Outlook.ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);
    
            }
    
            void Application_NewMailEx(string EntryIDCollection)
            {
                //more than one new mail arrives
                string[] entryIDs = EntryIDCollection.Split(',');
                foreach (string entryID in entryIDs)
                {
                    if (DialogResult.Yes == MessageBox.Show("Do you want to save your new message?", "You have got a new mail", MessageBoxButtons.YesNo))
                    {
                        Outlook.NameSpace ns = Application.Session;
    
                        Outlook.MailItem newmail = ns.GetItemFromID(entryID, missing) as Outlook.MailItem;
                        if (newmail != null)
                        {
                            SaveAttachmentsToDisk(newmail);
                        }
                    }
                }
    
            }
            public void SaveAttachmentsToDisk(Outlook.MailItem message)
            {
                string rootPath = "C:\\Temp";
    
                foreach (Outlook.Attachment attachment in message.Attachments)
                {
                    string fileName = string.Format("{0}\\{1}", rootPath, attachment.FileName);
                    attachment.SaveAsFile(fileName);
                }
    
            }
    }

    这个实例代码的作用是在接收到一封或者多封邮件之后,将邮件中的附件保存到磁盘上。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 LINZISO 2014年4月25日 5:40
    2014年4月23日 7:07
    版主
  • 非常感谢提供代码例子,参考这个例子,换个方式已经实现了初步要求。
    2014年4月25日 5:40