我的情况:酒店管理软件生成文本并在 Outlook 中打开带有该文本预设的“新电子邮件”窗口。但是,我需要电子邮件采用 HTML 格式,应用一些格式并添加正确的签名。
电子邮件格式是纯文本。有什么方法可以让该电子邮件自动更改为 html 格式吗?我没有在酒店软件中设置此选项。
可行的选择是什么?自动触发 VBA 脚本来改变这种情况?
答案1
我不知道 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
您需要记住将子程序中的 if 条件更改m_objMail_Open
为适合您的酒店软件生成的电子邮件和生成的 HTMLBody 的任何内容,以适合您所需的输出。
另请注意,每当在新窗口中打开任何电子邮件时,都会引发 MailItem.Open 事件,因此您需要检查您正在处理的是新电子邮件还是现有电子邮件(所以我想Not m_objMail.Sent And Not m_objMail.Saved
消除已发送和已接收的电子邮件,但您需要尝试一下)。