C# Attach打开outlook邮件,编辑发送
C# Attach to open outlook email, edit and send
我正在尝试让一些 C# 附加到打开的回复电子邮件(由用户手动触发),在已经 运行 的 Outlook 实例(由用户手动打开)上。该代码应识别打开的回复电子邮件、编辑电子邮件的主题行和正文并发送电子邮件。
问题是,我已经确定了 Outlook 的 运行 实例,并使用一种 Marshal 方法outApp = Marshal.GetActiveObject("Outlook.Application") as Application
将它分配给了一个对象,但是我无法将它转换为MailItem 类型,以便操纵其元素,例如主题行、正文等...类似 MailItem mailItem = (MailItem)outApp.CreateItem((OlItemType.olMailItem));
的内容会在运行时抛出无效的转换异常。
如果我错了,我深表歉意,但找不到与这个确切的事件序列相近的例子,其中一个比较接近的例子是 post c# outlook open existing instance and reply to email
但随后情况完全不同。关于如何使用 Microsoft.Office.Interop.Outlook 打开然后使用 Outlook 实例的内容有很多 post,但关于如何使用打开的实例几乎没有任何内容(我能找到)。感谢您的帮助,谢谢。
编辑 08102019:
该代码是从 RPA 平台使用的,因此不存在被识别为恶意软件的风险。 "user" 只是一个具有特定权限和受控环境的帐户上的虚拟用户...抱歉,这里没有什么黑暗的:-)。无论如何,这是我目前正在使用的代码,它创建一个新实例并将其保存到 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);
要在检查器中获取打开的邮件项目 window 您需要:
- 使用ActiveInspector方法获取
Inspector
class的实例。
- Inspector.CurrentItem 属性 returns 一个对象,表示检查器中显示的当前项目。
- 设置
Subject
、Body
、Recipients
等任何属性
要在资源管理器中获取内联响应 window 您需要使用 Explorer.ActiveInlineResponse 属性 其中 returns 一个项目对象代表活动的内联响应项目资源管理器阅读窗格。
我正在尝试让一些 C# 附加到打开的回复电子邮件(由用户手动触发),在已经 运行 的 Outlook 实例(由用户手动打开)上。该代码应识别打开的回复电子邮件、编辑电子邮件的主题行和正文并发送电子邮件。
问题是,我已经确定了 Outlook 的 运行 实例,并使用一种 Marshal 方法outApp = Marshal.GetActiveObject("Outlook.Application") as Application
将它分配给了一个对象,但是我无法将它转换为MailItem 类型,以便操纵其元素,例如主题行、正文等...类似 MailItem mailItem = (MailItem)outApp.CreateItem((OlItemType.olMailItem));
的内容会在运行时抛出无效的转换异常。
如果我错了,我深表歉意,但找不到与这个确切的事件序列相近的例子,其中一个比较接近的例子是 post c# outlook open existing instance and reply to email 但随后情况完全不同。关于如何使用 Microsoft.Office.Interop.Outlook 打开然后使用 Outlook 实例的内容有很多 post,但关于如何使用打开的实例几乎没有任何内容(我能找到)。感谢您的帮助,谢谢。
编辑 08102019:
该代码是从 RPA 平台使用的,因此不存在被识别为恶意软件的风险。 "user" 只是一个具有特定权限和受控环境的帐户上的虚拟用户...抱歉,这里没有什么黑暗的:-)。无论如何,这是我目前正在使用的代码,它创建一个新实例并将其保存到 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);
要在检查器中获取打开的邮件项目 window 您需要:
- 使用ActiveInspector方法获取
Inspector
class的实例。 - Inspector.CurrentItem 属性 returns 一个对象,表示检查器中显示的当前项目。
- 设置
Subject
、Body
、Recipients
等任何属性
要在资源管理器中获取内联响应 window 您需要使用 Explorer.ActiveInlineResponse 属性 其中 returns 一个项目对象代表活动的内联响应项目资源管理器阅读窗格。