なぜこのようなことが起こるのか、不思議に思うかもしれません。はっきり言って、これは元々 Gmail で書かれた電子メールを受信した場合にのみ発生します (Gmail のフォーマットが追加されていない通常の昔ながらのリンクは正常に機能します)。
Google はリンクの後に画像を挿入しますが、その画像の URI にはプロトコル (http
またはhttps
) が含まれていません。次のようになります。
<img src="//ssl.gstatic.com/ui/v1/icons/common/x_8px.png">
さて、Web ブラウザでは、これは問題なく動作します。ブラウザは、ページを読み込むために使用されたプロトコルを使用します (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 で発生する問題です。
この質問に対する 2 つの「回答」がインターネット上に散らばっています。
- ホストファイルにDNSエントリを追加して、ssl.gstatic.comを127.0.0.1に解決します。
- Outlookで画像の自動ダウンロードをオフにする
これらは答えではありません。大きな欠点がある回避策です。
- DNSエントリによりOutlookの問題は解決されますが、Webブラウザ経由でGoogleサービスにアクセスできなくなります。
- 画像のダウンロードをオフにするとOutlookの問題は解決しますが、多くのアドレスを信頼している人にとっては非常に迷惑なので、手動で画像のダウンロード/表示を選択する必要はありません。
残念ながら、Google はこの画像 URI を修正する気はありません (非プロトコル URI を持つ唯一の画像であるにもかかわらず - Gmail メッセージにはプロトコルを含む他の大量の画像が含まれています)。ただし、非プロトコル バージョンはブラウザーで正常に動作するため、これは理解できます。
Microsoft も同じ状況で、Windows ファイル共有リンクを示すために最初に非プロトコル バージョンを使用したため、修正されないと主張しています。
つまり、何年も前から存在している実際の問題を解決しようとする人は誰もいないのです。
答え1
私はエンド ユーザーに、なぜこのようなことが起こるのかを説明しました。Outlook は外部ファイルを探していますが、データを取得できません (エンド ユーザーが理解しやすい方法です)。
メールを編集 > 壊れた画像を選択 > 削除 > メールを保存するという手順を指示しました。
このメールにはもう存在しないため、このメールを開いても問題は発生しませんfile://ssl.gstatic.com/ui/v1/icons/common/x_8px.png
。
この方法は、Outlook の機能 (メールの編集) についてユーザーに説明するのに役立ち、内部の問題ではないことをユーザーに知らせるのに役立ちます。また、このようなメールはほとんど受信しない (6 か月に 1 件) ため、この方法を好みます。もちろん、この問題を抱えていて黙っている人がどれだけいるのかはわかりませんが、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 では、メッセージを開いて読むときに、このような変更は許可されないのではないかと思います。
これがうまくいくかどうか教えてください。他のことを実行するコードが大量にあるので、これを削除しました (したがって、この純粋な形で技術的にテストしたわけではありません)。