Заполните текст в редакторе сообщений электронной почты после событий New / Reply / ReplyAll в Outlook VSTO C# - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я создаю плагин Outlook для добавления предопределенного текста всякий раз, когда пользователь создает новое письмо ИЛИ Ответить ИЛИ Ответить всем на почтовое сообщение.

Я воспользовался учебными пособиями Microsoft и создал этот код:

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;
using System.Windows.Forms;

namespace VSTO_Outlook_fetch_New_Rely_Reply_All_events
{
    public partial class ThisAddIn
    {
        private Outlook.Application _application = null;
        Outlook.Inspectors inspectors;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _application = Globals.ThisAddIn.Application;
            _application.ItemLoad += new Outlook.ApplicationEvents_11_ItemLoadEventHandler(_application_ItemLoad);

            inspectors = this.Application.Inspectors;
            inspectors.NewInspector +=
            new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            // Note: Outlook no longer raises this event. If you have code that 
            //    must run when Outlook shuts down, see https://go.microsoft.com/fwlink/?LinkId=506785
        }
        Outlook.MailItem mi = null;

        private void GenerateItemMessage(object item, string operation)
        {
            mi = item as Outlook.MailItem;
            MessageBox.Show(String.Format("MailItem {0} : ", operation));
            MessageBox.Show(String.Format("To : {0}", mi.To));
            mi.Body = "Hi \n" + mi.Body;
        }

        private void ThisAddIn_ReplyAll(object item, ref bool cancel)
        {
            GenerateItemMessage(item, "ReplyToAll");
        }
        private void ThisAddIn_Reply(object item, ref bool cancel)
        {
            GenerateItemMessage(item, "Reply");
        }

        Outlook.ItemEvents_10_Event _item;
        private void _application_ItemLoad(object Item)
        {
            _item = (Outlook.ItemEvents_10_Event)Item;
            _item.ReplyAll += new Outlook.ItemEvents_10_ReplyAllEventHandler(ThisAddIn_ReplyAll);
            _item.Reply += new Outlook.ItemEvents_10_ReplyEventHandler(ThisAddIn_Reply);

        }

        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.Body = "This text was added by using code";
                }

            }
        }
        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}
  • Проблемы здесь заключаются в том, что при ответе / ответе на все события запускается текст, который вставляется в тело письма, на которое я отвечаю (а не в новое тело письма, которое должно быть отправлено).
  • И текст вставляется в конце тела (после подписи). Я хочу, чтобы это было в начале новой почты / ответа.

Кто-нибудь может мне помочь, пожалуйста? Кроме того, как я могу улучшить этот код?

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