Добавить обратный вызов для отправки события клика - PullRequest
0 голосов
/ 15 февраля 2019

Мне бы хотелось, чтобы, когда пользователь отправлял свою почту, ее копия создавалась и отправлялась другому лицу для архивирования.Пользователь использует ключевое слово, чтобы указать, нужно ли архивировать почту.(Мне нужно добавить некоторые данные во втором письме, которые не должны появляться в первом).

Поэтому я разработал в C # надстройку, где я перехватываю событие click «sent», чтобы скопировать письмо и отправить его.,Только невозможно отправить второе электронное письмо в этом случае.Поэтому я подумал о добавлении обратного вызова к моему событию, чтобы после отправки первого электронного письма отправлялось второе, но я не могу реализовать обратный вызов для своего кода (я не знаю, как это сделать в событииили даже если это возможно)

    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;
            }
        }

    }

необходимо отправить два электронных письма, первое, которое может быть отправлено кому-либо, второе, которое необходимо отправить роботу для архивирования по адресу электронной почты (робот@ google.fr, например) с другими дополнительными данными, которые не могут отображаться в 1-м

Редактировать решение: я изменил свой код, добавив событие при создании файла, когда я сохраняю свое сообщение в каталоге

    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 голосов
/ 15 февраля 2019

Создайте таймер (используйте класс Timer из пространства имен Forms при его запуске в основном потоке) и включите его в событии Application.ItemSend.Создайте новое сообщение, сохраните его, сохраните его идентификатор записи в списке.Когда таймер срабатывает, отключите таймер, откройте сообщения (Namespace.GetItemfromID), используя идентификаторы записей, сохраненные в вашем списке, отправьте их, очистите список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...