如何防止 Outlook 在收到 Google 云端硬盘链接时挂起?

Joh*_* T. 5 microsoft-outlook email google-drive

您可能想知道为什么会发生这种情况?好吧,需要明确的是,只有在收到最初用 Gmail 编写的电子邮件时才会发生这种情况(没有添加 Gmail 格式的常规老式链接可以正常工作)。

Google 在链接后插入图像,并且该图像 URI 不包含协议 (httphttps)。它看起来像这样:

<img src="//ssl.gstatic.com/ui/v1/icons/common/x_8px.png">
Run Code Online (Sandbox Code Playgroud)

现在,在网络浏览器中,这一切都可以正常工作;浏览器将使用加载页面时使用的任何协议(通常https是现在)。

然而,在 Outlook 中,这被解释为 Windows 文件共享链接。

因此,Outlook 决定尝试使用 Windows 文件共享(在端口 445 上)访问该地址,Google 不会拒绝该请求,而是会忽略它,并且 Outlook 会停止响应,直到 30 秒后超时。每次您打开邮件时,Outlook 都会执行此操作。

如果您转发邮件,Outlook 会file在图像 URI 上附加一个协议:

<img src="file://ssl.gstatic.com/ui/v1/icons/common/x_8px.png">
Run Code Online (Sandbox Code Playgroud)

当然,如果收件人有 Outlook,他或她也会遇到同样的问题(该file协议没有帮助;它只是确认 Outlook 认为它是对可通过 Windows 文件共享访问的文件的引用)。

这似乎与版本无关 - 这是 2016 年之前所有 Outlook 版本的问题。

对于这个问题,互联网上散布着两个建议的“答案”:

  1. 将 DNS 条目添加到您的主机文件中,以将 ssl.gstatic.com 解析为 127.0.0.1
  2. 关闭 Outlook 中图像的自动下载

这些都不是答案。这些解决方法有很大的缺点:

  1. DNS 条目将解决 Outlook 的问题...但会阻止您通过网络浏览器访问任何 Google 服务
  2. 关闭图像下载将解决 Outlook 的问题,但对于信任大量地址的任何人来说,这会非常烦人,因此您不必手动选择下载/显示图像

不幸的是,Google 没有兴趣修复此图像 URI(尽管它是唯一具有非协议 URI 的图像 - Gmail 消息否则包含大量其他都包含该协议的图像),尽管这是可以理解的,因为非协议版本在浏览器中运行良好。

微软也有同样的情况,声称他们首先使用非协议版本来指示Windows文件共享链接,因此他们也不会修复它。

所以没有人愿意解决已经存在多年的实际问题!

Joh*_* T. 1

我想出的唯一真正的答案是使用 VBA 脚本,我将在下面分享。我希望比我更聪明的人(或者至少有更多时间的人)可以将其变成一个真正的 Outlook 插件。我不在乎你是否能从中赚钱,但如果我能获得原始代码,那就太好了,尽管它相当简单。

警告:如果您不习惯使用 Visual Basic for Applications (VBA),那么您应该就此停止或找一个熟悉的人。

我不会介绍如何打开 Outlook 中的“开发人员”菜单,但您需要它才能打开 Visual Basic。

  1. 进入 Visual Basic 后,转至:
    • Project1
      • Microsoft Outlook Objects
        • ThisOutlookSession
  2. 在其下添加以下代码:
' When new mail is received...
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim arr() As String
    Dim i As Integer
    Dim item As Object
    Dim mailItem As mailItem
    arr = Split(EntryIDCollection, ",")
    For i = 0 To UBound(arr)
        Set item = GetItemById(arr(i))
        If item.Class = olMail Then
            Set mailItem = item
            Call FixGoogleDriveLinks(mailItem)
        End If
    Next
    Set item = Nothing
    Set m = Nothing
End Sub

' Fix Google's gstatic.com links with no protocol so that they use the https protocol explicitly
' This prevents Outlook from hanging on these since it attempts to treat them as Windows File Sharing links
Function FixGoogleDriveLinks(olItem As mailItem)
    olItem.HTMLBody = Replace(olItem.HTMLBody, """//ssl.gstatic.com", """https://ssl.gstatic.com") ' For new messages that came directly from Gmail
    olItem.HTMLBody = Replace(olItem.HTMLBody, "file://ssl.gstatic.com", "https://ssl.gstatic.com") ' For messages that were forwarded using Outlook
    olItem.Save
End Function
Run Code Online (Sandbox Code Playgroud)
  1. 单击保存图标
  2. 重新启动 Outlook
  3. 每次打开 Outlook 时都需要单击Enable Macros(否则代码将无法运行)

这将修复任何新邮件,但不会修复您可能隐藏在收件箱中的任何旧邮件(它们仍会冻结 Outlook 30 秒等)。我尝试创建代码来修复您尝试阅读的任何邮件,但我无法做到这一点。我怀疑当您打开邮件阅读邮件时,Outlook 不允许进行此类更改。

请告诉我这是否适合你 - 我有大量代码在做其他事情,所以我把它去掉了(所以我没有以这种原始形式对它进行技术测试。)