Изменить тело шаблона электронной почты Outlook из Excel - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь изменить тело HTML шаблона Outlook EMail из Excel VBA.

Мой код:

Sub Email_Button()

Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set OutApp = CreateObject("Outlook.Application")

Set OutMail = OutApp.CreateItemFromTemplate("S:\some\path\to\file\Email.oft")

With OutMail
    .Importance = olImportanceHigh
    .Subject = "Subject " & Date
    .Attachments.Add Application.ActiveWorkbook.FullName
    .HTMLBody = WorksheetFunction.Substitute(OutMail.HTMLBody, "%target%", "replacement")
    .Display
End With

' *** TIDY UP ***
Set OutMail = Nothing
Set OutApp = Nothing

End Sub

Вопрос очень похож на this one.

Когда я запускаю приведенный выше код, я получаю Run Time Error 287. Application-defined or object-defined error - ошибка появляется в строке модификации .HTMLBody.

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

Я ссылался на библиотеку объектов Microsoft Outlook 15.

Что не так?

ОБНОВЛЕНИЕ

Я добавил:

With OutMail
    .bodyFormat = olFormatHTML

Но все равно получил ту же ошибку в строке замены.Поэтому я заменил замену на:

.HTMLBody = "<HTML><BODY>Some HTML text here</BODY></HTML>"

И тело письма было обновлено до этого без ошибок.

Так что ошибка присутствует только при попытке использовать заменитель или его дляделать с часто.

Из отладчика похоже, что нет HTML-тела:

enter image description here

Тем не менее я подтвердил, что для типа тела установлено значениеHTML оба программно:

enter image description here

И, открыв часто сообщение и проверяя:

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

Наиболее вероятная причина - безопасность Outlook.

В целях безопасности все свойства HTMLBody, HTMLEditor, Body и WordEditor подчиняются запросам защиты информации об адресе, поскольку тело сообщения часто содержит отправителя илиадреса электронной почты других людей.

Конфигурации безопасности можно найти в HKCU \ Software \ Policies \ Microsoft \ office \ 16.0 \ outlook \ security \ (измените 16.0 на версию для вашего офиса)

Вы можете проверить два значения: promptoomaddressbookaccess и promptoomaddressinformationaccess

Измените их на 2 (или обратитесь к системному администратору), перезапустите Outlook и попробуйте снова.

Подробнее https://support.microsoft.com/en-za/help/926512/information-for-administrators-about-e-mail-security-settings-in-outlo

0 голосов
/ 13 июля 2019

Причина проблемы может быть связана с методом Substitute, поэтому я рекомендую запустить следующий код, чтобы убедиться, что все работает правильно:

Sub CreateHTMLMail()  
 Dim OutApp As Outlook.Application
 Set OutApp = CreateObject("Outlook.Application")
 'Creates a new email item and modifies its properties.  
 Dim objMail As Outlook.MailItem  
 'Create email item  
 Set objMail = OutApp.CreateItemFromTemplate("S:\some\path\to\file\Email.oft")
 With objMail  
 'Set body format to HTML  
 .BodyFormat = olFormatHTML  
 .HTMLBody = "<HTML><BODY>Enter the message text here. </BODY></HTML>"  
 .Display  
 End With  
End Sub

Другим аспектом являются запросы безопасности Outlook. Подробнее об этом читайте в предупреждении "Программа пытается отправить электронное письмо от вашего имени" в статье Outlook .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...