Я не знаю 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.Событие открытия вызывается всякий раз, когда любое электронное письмо открывается в новом окне, поэтому вам нужно проверить, имеете ли вы дело с новым письмом, а не с существующим (так что я думаю, что Not m_objMail.Sent And Not m_objMail.Saved
для устранения отправленных и полученных писем, но вам нужно поэкспериментировать с этим).