如何防止 Outlook 在收到 Google 雲端硬碟連結時掛起?

如何防止 Outlook 在收到 Google 雲端硬碟連結時掛起?

您可能想知道為什麼會發生這種情況?好吧,需要明確的是,只有在收到最初以 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 檔案共用存取的檔案的引用)。

這似乎與版本無關 - 這是 2016 年之前所有 Outlook 版本的問題。

對於這個問題,網路上散佈著兩個建議的「答案」:

  1. 將 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 不允許進行此類更改。

請告訴我這是否適合你 - 我有大量程式碼在做其他事情,所以我把它去掉了(所以我沒有以這種原始形式對它進行技術測試。)

相關內容