Хобрук: Ваш путь к мастерству в программировании

разработать плагин отслеживания электронной почты для Outlook в С#

Я хочу разработать плагин отслеживания электронной почты для Outlook в С#, я могу создать плагин, но не знаю, как отслеживать электронную почту, которая отправляется из моего Outlook с помощью С#, пожалуйста, поделитесь ссылками в блоге или коде. я создал простой плагин Hello World для Outlook

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;


namespace MyAddin
{
public partial class ThisAddIn
{
    private Office.CommandBar _objMenuBar;
    private Office.CommandBarPopup _objNewMenuBar;
    //private Outlook.Inspector Inspectors;
    private Office.CommandBarButton _objButton;
    private string menuTag = "MyMenu";
    Outlook.Inspectors inspectors;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.MyMenuBar();
        //Inspectors = this.Application.Inspectors;
        inspectors = this.Application.Inspectors;
        inspectors.NewInspector +=
        new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);

    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }

    void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
    {
        Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
        if (mailItem != null)
        {
            if (mailItem.EntryID == null)
            {
                mailItem.Subject = "This text was added by using code";
                mailItem.Body = "This text was added by using code";
            }

        }
    }

    private void MyMenuBar()
    {
        this.ErsMyMenuBar();

        try
        {
            _objMenuBar = this.Application.ActiveExplorer().CommandBars.ActiveMenuBar;
            _objNewMenuBar = (Office.CommandBarPopup)
                             _objMenuBar.Controls.Add(Office.MsoControlType.msoControlPopup
                                                    , missing
                                                    , missing
                                                    , missing
                                                    , false);

            if (_objNewMenuBar != null)
            {
                _objNewMenuBar.Caption = "my Plugin";
                _objNewMenuBar.Tag = menuTag;
                _objButton = (Office.CommandBarButton)_objNewMenuBar.Controls.
                Add(Office.MsoControlType.msoControlButton, missing,
                    missing, 1, true);
                _objButton.Style = Office.MsoButtonStyle.
                    msoButtonIconAndCaption;
                _objButton.Caption = "my Plugin";
                //Icon 
                _objButton.FaceId = 500;
                _objButton.Tag = "ItemTag";
                //EventHandler
                _objButton.Click += new Office._CommandBarButtonEvents_ClickEventHandler(_objButton_Click);
                _objNewMenuBar.Visible = true;
            }
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error: " + ex.Message.ToString()
                                               , "Error Message");
        }

    }


    #region VSTO generated code
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }
    #endregion

    #region "Event Handler"
    #region "Menu Button"

    private void _objButton_Click(Office.CommandBarButton ctrl, ref bool cancel)
    {
        try
        {
            System.Windows.Forms.MessageBox.Show("Hello World");
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error " + ex.Message.ToString());
        }
    }

    #endregion

    #region "Remove Existing"

    private void ErsMyMenuBar()
    {
        // If the menu already exists, remove it.
        try
        {
            Office.CommandBarPopup _objIsMenueExist = (Office.CommandBarPopup)
                this.Application.ActiveExplorer().CommandBars.ActiveMenuBar.
                FindControl(Office.MsoControlType.msoControlPopup
                          , missing
                          , menuTag
                          , true
                          , true);

            if (_objIsMenueExist != null)
            {
                _objIsMenueExist.Delete(true);
            }
        }
        catch (System.Exception ex)
        {
        System.Windows.Forms.MessageBox.Show("Error: " + ex.Message.ToString(), "Error Message");
        }
    }
    #endregion
    #endregion
}

}

05.12.2014

Ответы:


1

Я вижу, что вы использовали панели команд в коде. Начиная с Office 2007 используется новый пользовательский интерфейс. Панели команд устарели, начиная с Office 2010. Вместо этого вам нужно использовать Fluent UI (он же Ribbon UI). Подробнее о новом интерфейсе можно прочитать в следующих сериях статей:

Существуют различные способы отслеживания электронной почты:

  1. Добавьте пользовательское свойство. Это не лучший способ, потому что имущество может быть уничтожено.
  2. Используйте свойства элементов Outlook, подобные беседе* (*Id + *Index). Outlook использует эти свойства для группировки связанных элементов в беседах.
  3. Явно добавьте свой идентификатор в строку темы.

Вам решать, какой путь выбрать...

05.12.2014
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..