如何自动化Outlook?

时间:2016-07-15 20:12:53

标签: .net vb.net email outlook

我正在尝试从我们的ERP系统发送电子邮件。我尝试使用SMTP但它只适用于内部邮件,并且因外部邮件抱怨无法中继或其他内容而失败。我认为经理要么不想或不知道如何正确配置Exchange。

所以我的老板告诉我使用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 个答案:

答案 0 :(得分:2)

你可以试试这个:

Try
    objOutlook = Marshal.GetActiveObject("Outlook.Application")
Catch ex As Exception
    objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application)
End Try

请注意,在Visual Studio中以管理员身份运行并在Outlook已在用户模式下运行时访问Outlook时会出现问题。见this。尝试直接从bin文件夹运行EXE(不要以管理员身份运行)。