当前位置:  开发笔记 > 编程语言 > 正文

发送多线程SendEmail请求返回General Mapi Failure

如何解决《发送多线程SendEmail请求返回GeneralMapiFailure》经验,为你挑选了2个好方法。

我正在使用Dave Brooks的MAPI代码.

我试图以编程方式发送生成的Crystal报表.

当我在没有线程的情况下运行代码时,一切运行正常.问题是当我使用线程时,我得到返回错误"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

rnwood.. 7

一个非常晚的答案,但我想我还是会添加它,因为我刚刚遇到这个并且在其他地方找不到答案.

在使用以下命令启动之前,您需要将线程的公寓状态设置为STA:

theThread.SetApartmentState(ApartmentState.STA);

请注意,来自线程池的线程(例如,由BackgroundWorker组件使用)是MTA.



1> rnwood..:

一个非常晚的答案,但我想我还是会添加它,因为我刚刚遇到这个并且在其他地方找不到答案.

在使用以下命令启动之前,您需要将线程的公寓状态设置为STA:

theThread.SetApartmentState(ApartmentState.STA);

请注意,来自线程池的线程(例如,由BackgroundWorker组件使用)是MTA.



2> patrickbadle..:

我遇到了同样的错误(一般MAPI失败[2])并在我的调试早期遇到了这个解决方案; 但是,我的错误的原因是由于我的应用程序以管理员身份运行,而outlook作为我的用户运行.我很难找到错误的原因,所以希望这会帮助像我这样的搜索.

如果上述答案无法解决您的问题,请尝试在没有提升权限的情况下运行您的应用程序,或者找到一种方法使用用户模拟调用MAPI.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有