酒店软件在 Outlook 中打开电子邮件窗口并显示生成的文本 - 如何将其自动更改为 html 或触发 vba 脚本?

酒店软件在 Outlook 中打开电子邮件窗口并显示生成的文本 - 如何将其自动更改为 html 或触发 vba 脚本?

我的情况:酒店管理软件生成文本并在 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消除已发送和已接收的电子邮件,但您需要尝试一下)。

相关内容