C# 附加到打开的 Outlook 电子邮件,编辑和发送



我正在尝试将一些 C# 附加到已经运行的 Outlook 实例(由用户手动打开(上的打开的回复电子邮件(由用户手动触发(。代码应标识打开的回复电子邮件,编辑电子邮件的主题行和正文并发送电子邮件。

问题是我可以使用 Marshal 方法之一识别正在运行的 Outlook 实例并将其分配给对象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);

要在检查器窗口中获取打开的邮件项目,您需要:

  1. 使用 ActiveInspector 方法获取Inspector类的实例。
  2. 属性返回一个对象,表示检查器中显示的当前项。
  3. 设置任何属性,如SubjectBodyRecipients等。

若要在资源管理器窗口中获取内联响应,需要使用 Explorer.ActiveInlineResponse 属性,该属性返回一个表示资源管理器阅读窗格中活动内联响应项的项对象。

相关内容

  • 没有找到相关文章

最新更新