如何自动化Outlook?

3
我正在尝试从我们的ERP系统发送电子邮件。 我尝试使用SMTP,但它只适用于内部邮件,对于外部邮件则失败并报告无法中继等问题。 我认为经理要么不想要,要么不知道如何正确配置Exchange。
所以我的老板告诉我使用Outlook。 问题是我的代码在调试时正常工作,但如果Outlook打开,则会失败,而几乎每种情况下都会打开Outlook。 我通过修改供应商的安装程序使其工作,但我们希望不这样做。 我们使用的是Intuitive ERP 8.5。 它将其库文件存储在标准文件夹中,并且有一个定制文件夹用于任何自定义代码或继承的供应商对象。
Program Files\IntuitiveERP.exe Program Files\IntuitiveERP\Custom Program Files\IntuitiveERP\Standard
如果我将程序目录放在C:的根目录上,并合并标准和自定义文件夹,则代码将在Outlook打开或关闭时均可工作。 我们希望不修改供应商的安装程序,因为可能会导致更新问题。
'Fails with Cannot create ActiveX component.
objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application)
'Fails with Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005.
objOutlook = New Outlook.Application
mobjEmail = CType(objOutlook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)

With mobjEmail
    .CC = strEmployeeEmail
    .Subject = String.Format(Constants.RFQ.Email.Subject, strRFQID)
    .To = strTo
    .Body = Constants.RFQ.Email.Body
    .Attachments.Add(String.Format(Constants.RFQ.Output.FullPath, strRFQID))
    .Display(True)
End With

有没有办法在Outlook打开时获取对它的引用? 有其他替代方案吗?

1
不要使用Outlook。那太繁琐了。此外,需要在应用程序运行的任何地方安装Outlook。请使用SMTP,并告诉他们在Exchange中配置中继器。说白了就是这样(而且实际上也不太难)。 - rory.ap
1
@Ares -- 因为SMTP需要在Exchange中明确允许"显式中继",以防止恶意软件从您的服务器反弹邮件,这是出于安全考虑。 Outlook则不同;它设计用于在AD域设置中与Exchange配合使用,并且不使用SMTP。 - rory.ap
如果设计使用Outlook,那么每次安装Office或Windows更新时都会容易出现故障。尽可能使用SMTP方法。 - Tony Hinkle
@Ares,因为我亲眼见证了Outlook的工作。 - Jerry Lewis
@roryap,实际上,使用SMTP是一种hack。我必须创建自己的发送邮件表单(重新发明轮子),并提供非常有限的功能,而不像Outlook提供的那样丰富。此外,每个人都习惯了Outlook,我创建了我的表单尽可能像Outlook一样,但它并不相同。 - Jerry Lewis
显示剩余2条评论
1个回答

2
你可以尝试这个方法:
Try
    objOutlook = Marshal.GetActiveObject("Outlook.Application")
Catch ex As Exception
    objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application)
End Try

请注意,在使用 Visual Studio 以管理员身份运行并且 Outlook 已经在用户模式下运行时,访问 Outlook 存在问题。请参阅此链接。请尝试直接从 bin 文件夹运行 EXE(不要以管理员身份运行)。

谢谢,你指出了我遇到的问题之一。ERP软件需要以管理员身份运行。获取Outlook(在用户模式下运行)的引用失败。这就是为什么如果先关闭Outlook,它就可以正常工作的原因。这可能会帮助我让老板正确配置我们的Exchange。 - Jerry Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接