您可能想知道為什麼會發生這種情況?好吧,需要明確的是,只有在收到最初以 Gmail 編寫的電子郵件時才會發生這種情況(沒有添加 Gmail 格式的常規老式連結可以正常工作)。
Google 在連結後插入圖像,且該圖像 URI 不包含協定 (http
或https
)。它看起來像這樣:
<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 版本的問題。
對於這個問題,網路上散佈著兩個建議的「答案」:
- 將 DNS 項目新增至您的主機檔案中,以將 ssl.gstatic.com 解析為 127.0.0.1
- 關閉 Outlook 中影像的自動下載
這些都不是答案。這些解決方法有很大的缺點:
- DNS 項目將解決 Outlook 的問題...但會阻止您透過網頁瀏覽器存取任何 Google 服務
- 關閉圖像下載將解決 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。
- 進入 Visual Basic 後,轉至:
Project1
Microsoft Outlook Objects
ThisOutlookSession
- 在其下方加入以下程式碼:
' 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
- 點擊儲存圖示
- 重新啟動 Outlook
- 每次開啟 Outlook 時都需要按一下
Enable Macros
(否則程式碼將無法運作)
這將修復任何新訊息,但是它不會修復任何舊訊息您可能會躲在收件匣中(它們仍會凍結 Outlook 30 秒等)。我懷疑當您打開郵件閱讀郵件時,Outlook 不允許進行此類更改。
請告訴我這是否適合你 - 我有大量程式碼在做其他事情,所以我把它去掉了(所以我沒有以這種原始形式對它進行技術測試。)