Почему, вы можете спросить, это происходит? Ну, чтобы внести ясность, это происходит только при получении электронного письма, изначально написанного в Gmail (обычная старомодная ссылка без добавленного форматирования Gmail работает нормально).
Google вставляет изображение после ссылки, и URI этого изображения не содержит протокола ( http
или https
). Это выглядит примерно так:
<img src="//ssl.gstatic.com/ui/v1/icons/common/x_8px.png">
В веб-браузере это будет работать просто отлично: браузер будет использовать тот протокол, который использовался для загрузки страницы (обычно https
в наши дни).
Однако в Outlook это интерпретируется как ссылка на общий доступ к файлам Windows.
Итак, Outlook решает попытаться получить доступ к этому адресу с помощью Windows File Sharing (на порту 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 года.
В Интернете разбросано два предлагаемых «ответа» на этот вопрос:
- Добавьте запись DNS в файл hosts для разрешения ssl.gstatic.com в 127.0.0.1
- Отключить автоматическую загрузку изображений в Outlook
Это не ответы. Это обходные пути, которые имеют большие недостатки:
- Запись DNS решит проблему для Outlook... но не позволит вам получить доступ к любым службам Google через веб-браузер.
- Отключение загрузки изображений решит проблему для Outlook, но серьезно раздражает тех, кто доверяет большому количеству адресов, так как вам не придется вручную выбирать загрузку/показ изображений.
К сожалению, Google не заинтересован в исправлении URI этого изображения (хотя это единственное изображение с непротокольным URI — сообщения Gmail в противном случае содержат массу других изображений, все из которых включают этот протокол), хотя это и понятно, поскольку непротокольная версия отлично работает в браузерах.
Компания Microsoft находится в той же ситуации, утверждая, что они сначала использовали версию без протокола для указания ссылок общего доступа к файлам Windows, поэтому они также не будут ее исправлять.
Поэтому никто не хочет решать настоящую проблему, которая существует уже много лет!
решение1
Я объяснил конечным пользователям, почему это происходит: Outlook ищет внешний файл, но не может извлечь данные (простой способ для конечного пользователя).
Я дал им указание отредактировать электронное письмо > выбрать поврежденное изображение > удалить его > сохранить электронное письмо.
Больше не возникнет проблем с открытием этого письма, так как file://ssl.gstatic.com/ui/v1/icons/common/x_8px.png
в нем больше нет адреса.
Я предпочитаю этот метод, так как он помогает информировать пользователей о некоторых функциях Outlook (редактирование писем), информирует их, что это не внутренняя проблема, и из-за того, что мы получаем так мало таких писем (один инцидент каждые 6 месяцев). Конечно, я не знаю, у скольких людей есть эта проблема, и они молчат об этом, но я могу запустить скрипт PowerShell, чтобы узнать :)
решение2
ЕдинственныйнастоящийОтвет, который я придумал, заключается в использовании скрипта VBA, которым я поделюсь ниже. Я надеюсь, что кто-то умнее меня (или, по крайней мере, кто-то с большим количеством времени) сможет превратить это в настоящий плагин Outlook. Мне все равно, заработаете ли вы на этом деньги, но было бы здорово, если бы мне указали исходный код, даже если он довольно прост.
Предупреждение: если вам некомфортно работать с Visual Basic для приложений (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
- Вам придется нажимать
Enable Macros
каждый раз при открытии Outlook (иначе код не запустится)
Это исправит все новые сообщения, ноон не исправляет старые сообщениявы могли спрятаться в вашем почтовом ящике (они все равно заморозят Outlook на 30 секунд и т. д.) Я попытался создать код, чтобы исправить любое сообщение, которое вы пытаетесь прочитать, но у меня не получилось. Я подозреваю, что Outlook не позволит делать такие изменения, когда вы открываете сообщение, чтобы прочитать его.
Пожалуйста, дайте мне знать, работает ли это у вас или нет. У меня куча кода, выполняющего другие задачи, поэтому я его убрал (поэтому я технически не тестировал его в таком чистом виде).