首页 > 解决方案 > C# Attach 打开 Outlook 电子邮件、编辑和发送

问题描述

我正在尝试在已经运行的 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);

标签: c#outlookcomcom-automation

解决方案


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

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

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


推荐阅读