Как предотвратить зависание Outlook при получении ссылок Google Диска?

Как предотвратить зависание Outlook при получении ссылок Google Диска?

Почему, вы можете спросить, это происходит? Ну, чтобы внести ясность, это происходит только при получении электронного письма, изначально написанного в 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 года.

В Интернете разбросано два предлагаемых «ответа» на этот вопрос:

  1. Добавьте запись DNS в файл hosts для разрешения ssl.gstatic.com в 127.0.0.1
  2. Отключить автоматическую загрузку изображений в Outlook

Это не ответы. Это обходные пути, которые имеют большие недостатки:

  1. Запись DNS решит проблему для Outlook... но не позволит вам получить доступ к любым службам Google через веб-браузер.
  2. Отключение загрузки изображений решит проблему для 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.

  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. Вам придется нажимать Enable Macrosкаждый раз при открытии Outlook (иначе код не запустится)

Это исправит все новые сообщения, ноон не исправляет старые сообщениявы могли спрятаться в вашем почтовом ящике (они все равно заморозят Outlook на 30 секунд и т. д.) Я попытался создать код, чтобы исправить любое сообщение, которое вы пытаетесь прочитать, но у меня не получилось. Я подозреваю, что Outlook не позволит делать такие изменения, когда вы открываете сообщение, чтобы прочитать его.

Пожалуйста, дайте мне знать, работает ли это у вас или нет. У меня куча кода, выполняющего другие задачи, поэтому я его убрал (поэтому я технически не тестировал его в таком чистом виде).

Связанный контент