如何防止 Outlook 在接收 Google Drive 链接时挂起?

如何防止 Outlook 在接收 Google Drive 链接时挂起?

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

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

<img src="//ssl.gstatic.com/ui/v1/icons/common/x_8px.png">

现在,在网络浏览器中,这将正常工作;浏览器将使用用于加载页面的任何协议(通常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">

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

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

针对这一问题,互联网上有两种拟议的“答案”:

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

这些都不是答案。这些是具有重大缺点的变通方法:

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

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

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

因此没有人愿意解决这个已经存在多年的实际问题!

答案1

我已经告诉最终用户为什么会发生这种情况:Outlook 正在寻找外部文件,但无法检索数据(最终用户可以轻松理解)。

我已向他们指示编辑电子邮件>选择损坏的图像>删除它>保存电子邮件。

打开此电子邮件时不再出现问题,因为file://ssl.gstatic.com/ui/v1/icons/common/x_8px.png此电子邮件中不再存在问题。

我更喜欢这种方法,因为它有助于让用户了解 Outlook 的一些功能(编辑电子邮件),并告知他们这不是内部问​​题,因为我们收到的此类电子邮件非常少(每 6 个月发生一次)。当然,我不知道有多少人遇到了这个问题,却对此保持沉默,但我可能会运行 PowerShell 脚本来找出答案 :)

答案2

唯一的真实的我想到的答案是使用 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
  1. 点击保存图标
  2. 重新启动 Outlook
  3. 每次打开 Outlook 时都需要单击Enable Macros(否则代码将无法运行)

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

请让我知道这是否适合您 - 我有大量代码在做其他事情,所以我把它剥离了(所以我没有以这种原始形式进行技术测试。)

相关内容