Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 发送多线程SendEmail请求返回常规Mapi失败_Vb.net_Mapi - Fatal编程技术网

Vb.net 发送多线程SendEmail请求返回常规Mapi失败

Vb.net 发送多线程SendEmail请求返回常规Mapi失败,vb.net,mapi,Vb.net,Mapi,我在用电话 我试图通过编程发送生成的水晶报告 当我在没有线程的情况下运行代码时,一切都正常运行。问题是,当我使用线程时,返回错误“General MAPI failure[2]” 我以前从未使用过线程,我知道这会带来危险。有人能对这个问题提供一些见解吗?注意:为了使代码更清晰,我删除了异常处理 Private Sub RunReport() SetParameters() SaveReportFile() Dim operation As New ThreadStar

我在用电话

我试图通过编程发送生成的水晶报告

当我在没有线程的情况下运行代码时,一切都正常运行。问题是,当我使用线程时,返回错误“General MAPI failure[2]”

我以前从未使用过线程,我知道这会带来危险。有人能对这个问题提供一些见解吗?注意:为了使代码更清晰,我删除了异常处理

Private Sub RunReport()
    SetParameters()
    SaveReportFile()


    Dim operation As New ThreadStart(AddressOf SendEmail)
    Dim theThread As New Thread(operation)
    theThread.Start()
End Sub

Public Sub SendEmail()
   Dim m As MAPI
   m = New MAPI()
   Dim email As String
   For Each email In emailAddress
       m.AddRecipientBCC(email)
   Next email
   m.AddAttachment(@"c:\temp\report.pdf")
   m.SendMailPopup("Requested Report", "")
End Sub

一个很晚的答案,但我想我还是要添加它,因为我刚刚遇到这个问题,在别处找不到答案

在开始使用之前,您需要将线程的安装状态设置为STA:

theThread.SetApartmentState(ApartmentState.STA);

请注意,线程池中的线程(例如BackgroundWorker组件使用的线程)是MTA。

我遇到了相同的错误(常规MAPI故障[2]),并在调试早期遇到了此解决方案;但是,出现错误的原因是以管理员身份运行应用程序,而outlook以用户身份运行。我很难找到我的错误原因,所以希望这将有助于与我相同的搜索


如果上述答案不能解决您的问题,请尽可能在没有提升权限的情况下运行应用程序,或者找到使用用户模拟调用MAPI的方法。

MAPI是COM api,因此您需要检查MAPI是否支持多线程。还有,你一定要使用MAPI吗?如果您只是发送电子邮件,是否可以使用System.NET.Mail中内置的.NET framework中的SMTP支持?那么至少你没有使用COM api。这行代码是否打开了用户的默认电子邮件客户端?这正是我使用我的电子邮件客户端时遇到的问题;由于它所包含的DLL在生成后必须发送到%PROGRAMFILES%,因此我以管理员身份运行VS,但Outlook以我的身份运行。在纠正了这种情况之后,它现在运行得非常完美+先生,给你一个!永远都不会太晚,这只会拯救我的一天,谢谢!