我正在尝试在已经运行的 Outlook 实例(由用户手动打开)上将一些 C# 附加到打开的回复电子邮件(由用户手动触发)。代码应识别打开的回复电子邮件,编辑电子邮件的主题行和正文并发送电子邮件。
问题是我尽可能识别 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);