При отправке многопоточного запроса SendEmail возвращается общий сбой Mapi - PullRequest
6 голосов
/ 05 марта 2009

Я использую код MAPI Дейва Брукса .

Я пытаюсь программно отправить сгенерированный отчет Crystal.

Когда я запускаю код без потоков, все работает нормально. Проблема в том, что когда я использую многопоточность, я получаю сообщение об ошибке «Ошибка общего MAPI [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

Ответы [ 2 ]

7 голосов
/ 27 января 2010

Очень поздний ответ, но подумал, что я все равно добавлю его, поскольку только что столкнулся с этим и не смог найти ответ в другом месте.

Вам нужно установить состояние потока вашего потока в STA, прежде чем он будет запущен с помощью:

theThread.SetApartmentState(ApartmentState.STA);

Обратите внимание, что потоки из пула потоков (например, используемые компонентом BackgroundWorker) являются MTA.

6 голосов
/ 24 октября 2012

Я столкнулся с той же ошибкой (общий сбой MAPI [2]) и столкнулся с этим решением в начале моей отладки; однако причина моей ошибки была в том, что я запускал приложение от имени администратора, а Outlook работал от имени моего пользователя. Мне было трудно найти причину моей ошибки, так что, надеюсь, это поможет кому-то в том же поиске, что и я.

Если приведенный выше ответ не решит вашу проблему, попробуйте запустить приложение без повышенных привилегий, если это возможно, или найдите способ вызова MAPI с использованием олицетворения пользователя.

...