在vb.net中从Outlook.Application实例调用方法时,弹出窗口会暂停代码执行

时间:2016-11-03 19:15:24

标签: vb.net outlook activex

我们有一个vb.net windows应用程序,它创建一个Outlook.Application实例来打开一个电子邮件.MSG文件,并通过调用Outlook.Application SaveAs()方法将其保存为.HTML。

但是,有时调用.SaveAs()会导致出现弹出窗口,例如在保存经过数字签名的.MSG时,会出现一个确认弹出窗口。

此弹出窗口导致代码执行暂停,直到用户进行交互并在弹出窗口中单击“是”或“否”。由于我们的应用程序在服务器上运行并且不需要用户交互,因此会导致应用程序定期停止,直到技术人员登录到服务器并在弹出窗口中单击“是”。

有没有办法避免弹出,或者自动选择“是”? 我已经尝试调查Outlook.Application的文档,但当然MSDN上的文档非常缺乏。

以下是一些示例vb.net代码:

outlookapp = CreateObject("Outlook.Application")
Dim olItem As Object = outlookapp.CreateItemFromTemplate("C:\msg\message.msg")
olItem.SaveAs("C:\html\convertedmessage.html", 5)

如果对message.msg进行了数字签名,则在调用SaveAs()将其保存为HTML文件时,会弹出一个MSG经过数字签名的方法,这会暂停代码,直到您单击是或否。

注意:Outlook对象不支持Word对象的DisplayAlerts标志。

1 个答案:

答案 0 :(得分:0)

首先,Outlook不适用于没有用户的服务或服务器端应用程序。

在您的特定情况下,您可以执行以下操作:

1使用扩展MAPI(仅限C ++或Delphi)打开MSG文件(OpenIMsgOnIStg等),然后在代码中显式构建HTML文件。

2解析MSG文件(格式为documented)或使用多个商业组件之一(例如Aspose中的一个)来读取MSG文件。

3使用Redemption及其RDOSessionGetMessageFromMsgFile / RDOMailSaveAs(..., olHTML)方法打开MSG文件并执行转换。

dim Session As RDOSession = CreateObject("Redemption.RDOSession")
dim Msg As RDOMail = Session.GetMessageFromMsgFile("C:\msg\message.msg")
Msg.SaveAs("C:\html\convertedmessage.html", 5)