Я пытаюсь заставить C # присоединиться к открытому ответному электронному письму (инициированному пользователем вручную) на уже работающем экземпляре Outlook (открытом вручную пользователем). Код должен идентифицировать открытое ответное письмо, отредактировать строку темы и текст письма и отправить электронное письмо.
Проблема в том, что я дошел до определения работающего экземпляра Outlook и присвоения его объекту с помощью одного из методов Marshal outApp = Marshal.GetActiveObject("Outlook.Application") as Application
, но затем я не могу привести его к типу MailItem, чтобыманипулировать его элементами, например, строкой темы, телом и т. д., например, MailItem mailItem = (MailItem)outApp.CreateItem((OlItemType.olMailItem));
создает недопустимое исключение приведения во время выполнения
Извиняюсь, если я ошибаюсь, но не смог найти ни одного примера, близкого к этой точной последовательности событий, одним из более близких является этот пост c # outlook, открыть существующий экземпляр и ответить на электронную почту но тогда все идет совсем по-другому. Существует множество сообщений о том, как использовать Microsoft.Office.Interop.Outlook для ОТКРЫТИЯ, а затем использовать экземпляр Outlook, но вряд ли что-нибудь (что я мог найти) о том, как использовать открытый экземпляр. Любая помощь приветствуется, спасибо.
РЕДАКТИРОВАТЬ 08102019:
Код используется с платформы RPA, поэтому нет риска его обнаружения в качестве вредоносного ПО. «Пользователь» - это всего лишь виртуальный пользователь в учетной записи с целевыми разрешениями и контролируемой средой ... извините, ничего темного здесь нет :-). В любом случае, вот код, который я использую на данный момент, который создает новый экземпляр и сохраняет его в черновиках в Outlook. Это не то, что я намеревался сделать, как я объяснил выше, это просто временное исправление:
OutlookApp outlookApp = new OutlookApp();
MailItem mailItem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);
mailItem.To = "test@test.com";
mailItem.Subject = "Test Email Generation";
mailItem.HTMLBody = "<html><body>This is the body of the email.</strong>.<br/> This is another line in the body of the email.</body></html>";
mailItem.Display(false);
System.Threading.Thread.Sleep(3000);
mailItem.Close(OlInspectorClose.olSave);
Marshal.ReleaseComObject(outlookApp);