【问题标题】:Create Outlook email with an @Mention for a contact in the body为正文中的联系人创建带有@Mention 的 Outlook 电子邮件
【发布时间】:2021-04-30 05:04:27
【问题描述】:

我正在通过 Excel VBA 生成一封带有 HTML 正文的 Outlook 电子邮件。

我想在正文中@我组织中的一个联系人。例如@博客,乔

Mention 是最近几年添加到 Outlook 中的一项功能,它似乎是一个 HTML 链接。如何确保 Outlook 正确格式化此 mention

以下内容是否足以让 Outlook 将其识别为提及?

<a href="mailto:Joe.Bloggs@MyOrg.com">
<span style='font-family:"Arial",sans-serif;mso-no-proof:yes;text-decoration:none; text-underline:none'>@Bloggs, Joe</span>

【问题讨论】:

  • 没有。通过一些测试,看起来在 a 元素内的 href 前面通常有一个 id=(字母/数字的随机字符串)。如果你能弄清楚如何获得那个 id 值——我猜是它的静态值,你应该可以直接插入它。否则,它只会格式化为 html 点击,而不是 @提及。
  • 如果您在生成的 html 中搜索“提及”,那里似乎有一些底层 CSS。这会分享任何光吗?
  • 查看正文的 HTML 不会显式显示任何提及,但文本格式除外。添加提及时,我发现超链接版本和@Mentions 版本之间的唯一真正区别是在元素中添加了 id 标记。 &lt;a id= ~stringOfLettersAndNumbers~ href="mailto:email@email.email"&gt; 我翻遍了联系人、地址和交换属性,但找不到这个 ID 引用的那个。希望其他人会偶然发现您的答案。 ID 似乎没有改变,所以在最坏的情况下,您可以构建一个列表并使用它
  • 唉,即使在 HTML 中使用 id 似乎也无法让 Outlook 识别提及

标签: html excel vba outlook


【解决方案1】:

诀窍似乎在锚标签的id中:

  • 每个 ID 都需要以 OWAAM 开头(我怀疑它代表“Outlook Web Access At Mention”,因为这是该功能的起源),后跟 32 个字符的十六进制值,然后是 Z。李>
  • 每个 ID 在文档中都必须是唯一的,但对于提及项而言不必是唯一的,因此您可以为每次提及生成一个新 ID。

例如:

<a id="OWAAM954ABFF4E42A42989C2192D3F93BB32DZ" 
   href="mailto:immo@example.com">Immo Landwerth</a>

此代码适用于我 (C#):

static string GetMentionHtml(string email, string name)
{
    var guid = Guid.NewGuid().ToString("N").ToUpper();
    var id = $"OWAAM{guid}Z";
    return = $"<a id=\"{id}\" href=\"mailto:{email}\">@{name}</a>";
}

如果您在 VBA 中需要它:

Function GetMentionHtml(email As String, name As String) As String
    Dim id As String
    Dim html As String    
    id = "OWAAM" & NewGuid() & "Z"
    html = "<a id=""" & id & """ href=""mailto:" & email & """>@" & name & "</a>"
    GetMentionHtml = html
End Function

' Sadly there is no "get me a GUID" in VBA, but this is good enough.
' Source: https://www.codegrepper.com/code-examples/vb/excel+vba+generate+guid+uuid
Function NewGuid() As String
    Dim k&, h$
    NewGuid = Space(36)
    For k = 1 To Len(NewGuid)
        Randomize
        Select Case k
            Case 9, 14, 19, 24: h = "-"
            Case 15:            h = "4"
            Case 20:            h = Hex(Rnd * 3 + 8)
            Case Else:          h = Hex(Rnd * 15)
        End Select
        Mid$(NewGuid, k, 1) = h
    Next
    NewGuid = Replace(NewGuid, "-", vbNullString, Compare:=vbTextCompare)
End Function

【讨论】:

  • 嗯……看来还需要更多。这看起来像电子邮件的 HTML,但在发送时,它没有附加到电子邮件项目的“@”符号,因此不会归类为“提及邮件”
  • 您是否尝试过在锚点的内容中包含@ 符号?我已经更新了我的答案。我在 Outlook 中查看了生成的 HTML,没有明显的其他标记。此外,Outlook 似乎需要一点时间才能意识到有提及。我的发件箱有几秒钟没有@ 图标,然后它出现了。
  • 我在 Outlook 中使用了 VBA,尝试发送通过提及而被识别的电子邮件,但我似乎无法做到这一点。但是,当您将生成的 HTML 粘贴到 Outlook 中时,我的方法有效,因此我怀疑邮件编辑器会在电子邮件中添加一些 VBA 代码无法添加的额外数据。
  • 是否有类似于 ActiveSheet.Calculate 的 Outlook 等效项可以添加所有这些内容?
猜你喜欢
  • 2013-05-07
  • 2021-10-06
  • 2012-06-24
  • 2010-11-20
  • 1970-01-01
  • 2015-06-02
  • 2020-08-03
  • 2015-04-26
  • 2015-01-29
相关资源
最近更新 更多