2016-12-21 21 views
1

Я хочу отправить электронное письмо с помощью кода Microsoft Visual Basic для приложений. Библиотека объектов Microsoft Outlook 12.0 проверяется в разделе «Инструменты/ссылки». Код компилируется без ошибок. Код работает отлично на двух разных машинах, но когда я тестирую его на третьей машине, он дает ошибку при выполнении строки # 2.VBA - Исходящий вызов не может быть выполнен, так как приложение отправляет синхронный вызов

Dim email As Outlook.MailItem 
Set email = Application.CreateItem(olMailItem) 
    email.To = "[email protected]" 
    email.Subject = "Subject" 
    email.Body = "Body" 
    email.Send 
Set email = Nothing 

Я просмотрел много сообщений об этой ошибке, но не может найти подходящее решение. Заранее спасибо за вашу помощь.

+0

Все ли они работают с той же версией перспективы? Какую ошибку вы получаете? – Marcelo

+0

Вы запускаете код в Outlook на третьей машине? –

+0

@Marcelo: Все они работают с той же версией Outlook. Ошибка, которую я получаю, это «Ошибка № -2147417843. Ошибка автоматизации. Исходящий вызов не может быть выполнен, так как приложение отправляет синхронный вызов». –

ответ

0

Спасибо, всем, за основные ответы. Оказывается, решение проблемы заключается в использовании CDO для отправки электронной почты. Вот код, который работал для меня:

Set objMessage = CreateObject("cdo.message") 
Set objConfig = CreateObject("cdo.configuration") 
Set Flds = objConfig.Fields 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "myExchangeServerName" 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'basic (clear-text) authentication 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "myDomain\[email protected]" 
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "myPassword" 
Flds.Update 
Set objMessage.Configuration = objConfig 
objMessage.To = "[email protected]" 
objMessage.From = "[email protected]" 
objMessage.Subject = "My Subject" 
objMessage.Fields.Update 
objMessage.HTMLBody = "<p><span style=""font-family: 'Calibri','Arial','sans-serif'"";>My Body Text</span></p>" 
objMessage.AddAttachment "C:/path/filename.txt" 
objMessage.Send 
0

Когда именно выполняется этот код? Может ли он запускаться из обработчика событий значка в трее?

Запускайте таймер, когда срабатывает таймер (вы будете вне входящего вызова RPC), запустите свой код выше.

+0

Код выполняется высокопроизводительной программой под названием TeleForm Reader. Он просто остается открытым как приложение на сервере (не в лотке). Как запустить таймер для запуска кода? Я читал об этом как о возможном решении, но не нашел хорошего URL-адреса, который объясняет, как это сделать. Благодарю. –

+0

Я считаю, что третья машина (называемая Reader) выполняет несколько многопоточных операций, и поэтому возникает ошибка при попытке вызвать Outlook с третьей машины. Мне никогда не приходилось сталкиваться с проблемами раньше. Тьфу! Если я не могу понять, как это сделать, мне, возможно, придется переключить свой подход и попытаться отправить электронное письмо с помощью MAPI или с помощью прямого SMTP. –