Enviando pedido SendEmail multi-threaded retorna Geral Mapi Failure
Pergunta
Eu estou usando o href="http://www.codeproject.com/KB/IP/SendFileToNET.aspx" rel="noreferrer"> código .
Eu estou tentando enviar programaticamente um Crystal Report que é gerado.
Quando eu executar o código sem enfiar tudo corre bem. O problema é quando eu uso enfiar eu recebo o erro de retorno "Falha geral MAPI [2]".
Eu nunca usei rosca antes e entender que existem perigos envolvidos. Alguém pode fornecer qualquer visão sobre esta questão? NOTA:. Eu removi manipulação de exceção para tornar o código mais clara
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
Solução
Uma resposta muito tarde, mas pensei que eu adicioná-lo de qualquer maneira como eu só encontrei este e não poderia encontrar uma resposta em outro lugar.
Você precisa definir o estado de apartamento do seu segmento a STA antes que ele é iniciado usando:
theThread.SetApartmentState(ApartmentState.STA);
Note-se que os fios do threadpool (por exemplo, usado por BackgroundWorker componente) são MTA.
Outras dicas
Eu encontrei este mesmo erro (Falha geral MAPI [2]) e me deparei com esta solução no início da minha depuração; no entanto, a causa para o meu erro foi devido a executar o meu aplicativo como administrador enquanto o Outlook estava correndo como meu usuário. Eu tive um tempo difícil encontrar a causa do meu erro por isso espero que isso vai ajudar alguém na mesma pesquisa como me.
Se a resposta acima não resolver o problema, tente executar o aplicativo sem privilégios elevados, caso possível, ou encontrar uma maneira de MAPI chamada usando representação de usuário.