6

我正在使用Dave Brooks 的 MAPI 代码

我正在尝试以编程方式发送生成的 Crystal Report。

当我在没有线程的情况下运行代码时,一切都运行良好。问题是当我使用线程时,我得到返回错误“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
4

2 回答 2

7

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

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

theThread.SetApartmentState(ApartmentState.STA);

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

于 2010-01-27T10:21:13.247 回答
6

我遇到了同样的错误(General MAPI failure [2])并且在我调试的早期就遇到了这个解决方案;但是,我的错误的原因是由于 Outlook 以我的用户身份运行时以管理员身份运行我的应用程序。我很难找到错误的原因,所以希望这会帮助与我进行相同搜索的人。

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

于 2012-10-24T16:06:14.007 回答