添加回调以发送点击事件

时间:2019-02-15 09:15:45

标签: c# callback outlook-addin

我希望当用户发送邮件时,将其副本制作并发送给其他人以进行存档。用户使用关键字来指定是否应存档邮件。 (我需要在第二封邮件中添加一些数据,这些数据不应出现在第一封邮件中)

因此,我在C#中开发了一个插件,我在其中拦截点击“已发送”事件以复制邮件并发送。只有这种情况下,无法发送第二封电子邮件。因此,我考虑为事件添加回调,以便在发送第一封电子邮件后发送第二封电子邮件,但是我无法对我的代码实施回调(我不知道如何在事件中执行该回调,或者即使有可能)

    Outlook.MailItem mailCopy; //Copy of my first mail
    bool sndCopy = false;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); //event click send
    }
    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }
    private void Application_ItemSend(object Item, ref bool Cancel)
    {
        Outlook.Application oApp;
        Outlook._NameSpace oNS;
        Outlook.MAPIFolder oFolder;
        oApp = new Outlook.Application();
        oNS = (Outlook._NameSpace)oApp.GetNamespace("MAPI");

        Outlook.MailItem mail1 = (Outlook.MailItem)Item;


        this.mailCopy = (Outlook.MailItem)Item;

        Outlook.MailItem mail = (Outlook.MailItem)Item;

        foreach(Outlook.Recipient rcp in mail.Recipients){
           if(rcp.Address == "Robots"){
               this.sndCopy = true;
               break;
            }
        }

    }

必须发送两封电子邮件,第一封可以发送给任何人,第二封电子邮件必须发送到机器人以便通过电子邮件地址(例如,robot @ google.fr)进行归档,其中包含其他无法发送的数据出现在第一名

编辑解决方案: 当我将消息保存在目录中时,我通过在创建文件时添加一个事件来修改代码

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
        fileSystemWatcher.Path = path;


        this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); //event click send

        fileSystemWatcher.Created += FileSystemWatcher_Created;
        fileSystemWatcher.EnableRaisingEvents = true;
    }

    private void Application_ItemSend(object Item, ref bool Cancel)
    {


        Outlook.Application oApp;
        Outlook._NameSpace oNS;
        oApp = new Outlook.Application();

        oNS = (Outlook._NameSpace)oApp.GetNamespace("MAPI");

        Outlook.MailItem mail = (Outlook.MailItem)Item;

        mail.SaveAs(path + "\\files.msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);

    }

    private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
    {
        Outlook.Application oApp = new Outlook.Application();
        Outlook.MailItem msg = (Outlook.MailItem)oApp.CreateItemFromTemplate(path + "\\files.msg", Type.Missing);
        msg.Send();
        File.Delete(path + "\\files.msg");
    }

1 个答案:

答案 0 :(得分:1)

创建一个计时器(在主线程上触发时,使用Forms命名空间中的Timer类)并在Application.ItemSend事件中启用它。创建新消息,保存它,并将其条目ID存储在列表中。当计时器启动时,禁用计时器,使用列表中保存的条目ID打开消息(Namespace.GetItemfromID),发送消息,清除列表。