Задача

Нужно реализовать всплывающее окно в Outlook 2016, если число получателей письма больше одного.
Вот что получилось. Исходники. Инсталлятор.

Средства

Visual Studio 2017 Community Edition + VSTO (Visual Studio Tools for Office).
ToolsGet Tools And Features → вкладка Workloads → ставим галочку на Office/Sharepoint Development.
после установки открываем Visual Studio.
FileNewProject → слева InstalledVisual C#Office/Share PointVSTO AddInsOutlook 2013 and 2016 Add-in

Алгоритм

Для начала я попытаюсь реализовать самый простой вариант.
При нажатии кнопки Send моя надстойка будет проверять количество реципиентов. Если их больше 1 - показываем диалоговое окно с вопросом “Слать/Не слать”…

Реализация

Реализацию нашел в книжке: https://books.google.ru/books?id=DnxuBDWM9E4C&pg=PT157&lpg=PT157&dq=VSTO+show+dialog+on+mail+send&source=bl&ots=-JvI4l1OS9&sig=zaVaxedmASxcDgnrEJp6MVWJJxs&hl=ru&sa=X&ved=2ahUKEwiYnJeLo5reAhXDhKYKHZ9ZAhEQ6AEwBHoECAUQAQ#v=onepage&q=VSTO%20show%20dialog%20on%20mail%20send&f=false

using System;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Windows.Forms;
using Microsoft.Office.Interop.Outlook;

namespace Multiple_Recipients_PopUP
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }

        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
        }

        void Application_ItemSend(object Item, ref bool Cancel)
        {
            Outlook.MailItem currentMailItem = Item as Outlook.MailItem;

            if (currentMailItem != null)
            {
                if (currentMailItem.Recipients.Count > 1)
                {
                    string message = "Send mail to {0} people?";
                    string caption = "More than one recipient...";
                    MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                    DialogResult result;
                    result = MessageBox.Show(String.Format(message, currentMailItem.Recipients.Count), caption, buttons);

                    if (result == DialogResult.No)
                    {
                        Cancel = true;
                        return;
                    }
                }
            }
        }
        #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
    }
}

Проверка того, что все работает

Жмем BuildPublish
Выбираем папку, куда опубликуется наша надстройка и выбираем тип - я выбрал CD-ROM.
В результате в выбранной папке появится файлик setup.exe и файлы надстройки, с помощью которых можно установить созданную надстройку.

Развертывание

Creating a Basic Installer for VSTO project
Разворачивать полученную надстройку можно либо с помощью Cick-Once, либо с помощью Microsoft Installer. Как написано тут Cick-Once не позволяет развернуть надстройку сразу для всех пользователей компа/сервера. Однако, мне надо развернуть ее на терминальном сервере.

Скачиваем и устанавливаем Microsoft Visual Studio 2017 Installer Projects
В Solution Explorer жмакаем правой кнопкой по солюшену и создаем новый проект - Add → New Project… → Other Project Types → Visual Studio Installer → Setup Project.
Нам надо добавить файлы надстройки и записи в реестре.

В Solution Explorer жмакаем правой кнопкой по проекту → Add → Project Output…
Там в поле Project выбран наш единственный проект, а из списка выбираем Primary Output.
В результате в проект инсталлятора добавится dll нашей надстройки и необходимые зависимости.
Кроме того, надо добавить файлы *.vsto и *.manifest, которые лежат в папке с собранной надстройкой.
В Solution Explorer жмакаем правой кнопкой по проекту → Add → File… и находим файлы *.vsto и *.manifest из папки bin\Release.
В Solution Explorer жмакаем правой кнопкой по проекту → View → File System.
Кликаем по Application Folder и справа в строке DefaultLocationуказываем путь установки. Обычно это [ProgramFilesFolder][Manufacturer]\[ProductName], а значения входящих в путь переменных в свою очередь заданы в свойствах проекта.

В Solution Explorer жмакаем правой кнопкой по проекту → View → Registry. Дальше делаем в соответствии с этим - Registry entries for VSTO Add-ins
В окошке Registry On target Machine добавляем ключи: HKLM\Software\Microsoft\Office\Outlook\Addins\Multiple_Recipients_PopUP
И добавляем описанные параметры.
Путь к манифесту задаем как [ProgramFilesFolder][Manufacturer]\[ProductName]\…
В качестве манифеста указываем файл vsto из корня. На сборочной машине у меня файл реестра был указан как filename.vsto|vstolocal. При разворачивании |vstolocal не нужен. Путь к манифесту указываем без |vstolocal.
Правильные значения этих параметров можно поглядеть на компе на котором собиралась и тестировалась надстройка.

В Solution Explorer кликаем по проекту и справа в окне свойств меняем значение поля InstallAllUsers на True.

Публикация с помощью политик GPO

Тестирование и отладка

В моем случае - после того как я проверил работу моей надстройки на своей машине, собрал инсталлятор и установил надстройку на целевой сервер она нормально появилась в Outlook 2016 у пользователя, но запускаться отказывалась.
Для того, чтобы посмотреть какую ошибку выдает надстройка при запуске нужно:

  • открыть окошко cmd и задать переменной VSTO_SUPPRESSDISPLAYALERTS значение 0
set VSTO_SUPPRESSDISPLAYALERTS=0
  • Запустить Outlook из этого окошка.
C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE

Затем в Outlook → File → Options → Add-Ins → Manage COM Add-ins Go… → ставим галочку на оснастке и жмем OK. В результате появится окно с сообщением и кнопкой Details.

Enter your comment. Wiki syntax is allowed:
 
  • ms_windows_ms_sql/visual-studio_2017-community-vsto-outlook.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1