【问题标题】:How to add HTMLBody Signature?如何添加 HTMLBody 签名?
【发布时间】:2021-12-26 21:13:17
【问题描述】:

我需要在生成的 Outlook 电子邮件末尾添加我的签名。

我将我的 (.HTMLBody = msg) 更改为 (.HTMLBody = msg & .HTMLBody)。这让我的签名显示出来,但我的消息文本消失了。当我在最后删除 .HTMLBody 并使用我的原始代码时,我的文本显示格式正确但没有签名。

Sub Email()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim Path As String
    Dim strbody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    msg = "<p>Hello World,</p><br>"

    On Error Resume Next
    With OutMail
        .Display
        .To = ""
        .CC = ""
        .BCC = ""
        .Subject = "Fruits Stock " & Path
        .HTMLBody = msg & "Hello World" & .HTMLBody
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    您是否使用 Google 搜索过 MailItem.HTMLBody

    它显示了一个示例here

    Sub CreateHTMLMail() 
     
     'Creates a new email item and modifies its properties. 
     
     Dim objMail As Outlook.MailItem 
     
     
     
     'Create email item 
     
     Set objMail = Application.CreateItem(olMailItem) 
     
     With objMail 
     
     'Set body format to HTML 
     
     .BodyFormat = olFormatHTML 
     
     .HTMLBody = _ 
     
     "<HTML><BODY>Enter the message text here. </BODY></HTML>" 
     
     .Display 
     
     End With 
     
    End Sub
    

    如果您希望您的电子邮件采用 HTMl 格式,您需要设置一个标志:

    .BodyFormat = olFormatHTML


    查找MailItem.BodyFormat 属性。

    【讨论】:

      【解决方案2】:

      在创建用于发送具有特定签名的电子邮件的循环时,我遇到了类似的问题。就我而言,我必须从几个签名中选择一个,因为它可能因每封电子邮件而异。

      我将签名名称作为字符串变量Signame 传递给一个单独的函数,用于将签名添加到电子邮件中。

      'Code trimmed down a lot to just relevant bits
      Sub Email()
      'Create email here
      Dim Email as outlook.mailitem, OutApp as Object
      Set OutApp = CreateObject("Outlook.Application")
      Set Email = OutApp.Createitem(olMailItem)
      'Email Content:
      Email.Htmlbody = "<p>Hello World</p>" & AddSig("My_Signature")
      Email.display
      End Sub
      
      Function AddSig(Signame as string)
      If Len(Signame) > 0 Then
          Dim fso As Object, ts As Object
          Set fso = CreateObject("Scripting.FileSystemObject"): Set ts = fso.GetFile(Environ("Appdata") & "\Microsoft\Signatures\" & Signame & ".htm").OpenAsTextStream(1, -2)
          Signame = Replace(Signame, " ", "%20")
          AddSig = "<br>" & Replace(ts.ReadAll, _
              Signame & "_files", _
              Replace(Environ("Appdata"), " ", "%20") & "\Microsoft\Signatures\" & Signame & "_files")
      End If
      End Function
      

      在我输入“My_Signature”的地方替换您的签名名称。

      这不适用于名称中带有空格的签名,尽管我努力使用Signame = Replace(Signame, " ", "%20") - 这与 HTML 有关。我刚刚重命名了我的签名以删除所有空格。

      【讨论】:

      • 这对我来说很有意义。我正在尝试添加 Set Email = Application.Createitem(olMailItem) 但我收到运行时错误“438”:对象不支持此方法或属性。不确定我需要启用什么。我还做了一些事情,我将签名声明为几乎似乎可以工作的变体,但我的签名会闪烁然后被“hello world”的正文覆盖
      • 抱歉,忘记我们在 Excel vba 中而不是 Outlook vba - 您需要根据问题中的代码CreateObject("Outlook.Application")。编辑适合的答案。
      • @user17420363,您的代码在我的 Outlook 或 Excel VBA 中运行良好!!!可能是一些 Outlook 自定义设置。您使用的是哪个版本的 Office?
      • .16 我想。在研究了尝试执行此操作时收到的错误消息后,我开始相信我的问题实际上可能与非常严格的安全策略有关。
      猜你喜欢
      • 2019-02-18
      • 2017-06-16
      • 2016-12-17
      • 2020-05-14
      • 2014-07-29
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2016-07-12
      相关资源
      最近更新 更多