我有一个与Outlook集成的应用程序,只是为了发送带有附件的电子邮件(VB)。. NET v4).
因为我需要它在多个版本的Outlook上运行,所以我使用了延迟绑定。
在我的本地系统和另一个部署系统上,一切正常(Outlook 2016)。
在3个特定的系统上,我无法创建"Outlook。因为抛出了一个异常,不幸的是,错误没有告诉我任何信息。这只发生在Outlook正在运行时。(所有运行win10的系统)
我正在从网络共享中运行应用程序,但是我已经尝试从c: drive和documents目录在本地运行。还尝试以管理员身份运行。
我尝试过的另一件事是检查Outlook是否正在运行以获取对象,而不是创建对象,但如果Outlook正在运行则错误仍然存在。
这是我使用的:
Public Class Email
Public Shared Sub EnviaEmail(ByVal pEnderecoDestino() As String, ByVal pAssunto As String, ByVal pBody As String, Optional ByVal pEnderecoCC() As String = Nothing, Optional ByVal pEnderecoBCC() As String = Nothing, Optional ByVal pAnexos() As String = Nothing)
Dim objOutlook As Object
Dim objMensagem As Object
Dim objEnderecos As Object
Dim objEndereco As Object
Dim objAnexos As Object
Try
Dim fechaApp As Boolean = False
If Process.GetProcessesByName("OUTLOOK") Is Nothing Then fechaApp = True
objOutlook = CreateObject("Outlook.Application")
objMensagem = objOutlook.CreateItem(0)
With objMensagem
.Subject = pAssunto
.BodyFormat = 1
.Body = pBody
End With
objEnderecos = objMensagem.Recipients
For i As Integer = 0 To pEnderecoDestino.Length - 1 Step 1
If Not String.IsNullOrEmpty(pEnderecoDestino(i)) Then
objEndereco = objEnderecos.Add(pEnderecoDestino(i).Trim())
objEndereco.Type = 1
objEndereco.Resolve()
End If
Next i
If Not pEnderecoBCC Is Nothing Then
For i As Integer = 0 To pEnderecoBCC.Length - 1 Step 1
If Not String.IsNullOrEmpty(pEnderecoBCC(i)) Then
objEndereco = objEnderecos.Add(pEnderecoBCC(i).Trim())
objEndereco.Type = 3
objEndereco.Resolve()
End If
Next i
End If
If pEnderecoCC IsNot Nothing Then
For i As Integer = 0 To pEnderecoCC.Length - 1 Step 1
If Not String.IsNullOrEmpty(pEnderecoCC(i)) Then
objEndereco = objEnderecos.Add(pEnderecoCC(i).Trim())
objEndereco.Type = 2
objEndereco.Resolve()
End If
Next i
End If
objAnexos = objMensagem.Attachments
If pAnexos IsNot Nothing Then
For i As Integer = 0 To pAnexos.Length - 1 Step 1
objAnexos.Add(pAnexos(i))
Next i
End If
objMensagem.Send()
If fechaApp Then objOutlook.Quit()
Catch ex As COMException
Select Case ex.ErrorCode
Case -2147467260
Throw New Exception("Permission denied to access MS Outlook", ex.InnerException)
Case -2147221164
Throw New Exception("MS Outlook not installed" , ex.InnerException)
Case Else
Throw ex
End Select
Finally
objAnexos = Nothing
objEndereco = Nothing
objEnderecos = Nothing
objMensagem = Nothing
objOutlook = Nothing
End Try
End Sub
End Class
如果Outlook已经运行,你只会看到错误,这很可能意味着Outlook和你的应用程序在不同的安全环境中运行。Outlook是单例的,所以它会尝试连接到已经运行的实例。但是,COM系统不会封送具有不同安全上下文的进程之间的调用。