Я не знаю VBA, но в PowerShell скрипт будет выглядеть так (обратите внимание, что он использует классы VBA):
#Create Outlook Application object $ol = New-Object -comObject Outlook.Application # Create the new email $mail = $ol.CreateItem(0) # 0 is the value of OlItemType.olMailItem # Set the subject $mail.Subject = "Formatting test" # Set body format to HTML $mail.BodyFormat = 2 # 2 is the value of OlBodyFormat.olFormatHTML # Set the body $mail.HTMLBody = "<html><body><p>Test</p></body></html>" # Bring the message window to the front $mail.Display()
Надеюсь, это поможет.
Изменить: я включил Инструменты разработчика в моем Outlook и, используя примеры из документации, я преобразовал свой код PowerShell в подпрограмму VBA:
Sub MakeMessage() Dim OutlookMessage As Outlook.MailItem Set OutlookMessage = Application.CreateItem(olMailItem) OutlookMessage.Subject = "Hello World!" OutlookMessage.BodyFormat = olFormatHTML OutlookMessage.HTMLBody = "<html><body><p>Test</p></body></html>" OutlookMessage.Display End Sub
хотя я до сих пор не знаю, как запустить это как скрипт.
Изменить: Хорошо, вот как использовать события для редактирования электронной почты при открытии:
Dim WithEvents m_objMail As Outlook.mailItem Private Sub Application_ItemLoad(ByVal Item As Object) Select Case Item.Class Case olMail Set m_objMail = Item End Select End Sub Private Sub m_objMail_Open(Cancel As Boolean) If m_objMail.Subject = "Hello World!" Then m_objMail.BodyFormat = olFormatPlain m_objMail.HTMLBody = "<html><body><p>Body: " + m_objMail.body + " </p></body></html>" End If End Sub
Вы должны помнить, чтобы поменять условие в подпрограмме m_objMail_Open
на то, которое соответствует электронной почте, сгенерированной вашим гостиничным программным обеспечением и сгенерированной HTMLBody, чтобы соответствовать желаемому результату.
Также обратите внимание, что событие MailItem.Open возникает всякий раз, когда любое электронное письмо открывается в новом окне, поэтому вам нужно проверить, имеете ли вы дело с новым письмом, а не с существующим (поэтому я предполагаю Not m_objMail.Sent And Not m_objMail.Saved
исключить отправленные и полученные письма, но вам нужно поэкспериментировать с этим).