Новое кеширование изображений Gmail нарушает ссылки на изображения в информационном бюллетене

105

У меня есть несколько автоматических писем, которые отправляются после завершения регистрации на моем сайте.

До недавнего времени они работали нормально. Теперь новая система Google переписывает изображения и сохраняет их в кеше (предположительно).

Тем не менее, новое изменение Google ссылок на мои изображения полностью нарушает их, давая ошибку 500 и неработающее изображение ссылки.

Допустим, мой нормальный URL-адрес изображения:

http://www.mysite.com/images/pic1.jpg

Google переписывает это так:

https://ci5.googleusercontent.com/proxy/vI79kajdUGm6Wk-fjyicDLjZbCB1w9NfkoZ-zQFOB2OpJ1ILmSvfvHmE56r72us5mIuIXCFiO3V8rgkZOjfhghTH0R07BbcQy5g=s0-d-e1-ft#http://www.mysite.com/images/pic1.jpg

Однако по этому URL-адресу ничего нет.

Электронное письмо с ошибками изображения

Итак, либо что-то не так со ссылками, которые создаются Google, либо изображения просто не загружаются на сервер googleusercontent, но я не знаю, как решить эту проблему.

Я использую PHP, библиотеку phpmailer и сервер Ubuntu на Amazon EC2, но я не уверен, что это связано с проблемой.

Ронни Ноксвилл
источник
есть ли у вас какие-либо функции безопасности на вашем сервере или логика, обслуживающая изображение? доступно ли это только в течение ограниченного времени или с такими функциями?
Pixou
Для просмотра изображений нет какой-либо функции безопасности или системы входа в систему, они находятся в общей папке в системе. Если вы перейдете по исходной ссылке, изображения можно будет просмотреть. Проблема в том, что при переписывании URL-адреса Google либо не загружает изображение на свои серверы, либо неправильно направляет пользователя на мой сайт.
RonnyKnoxville
1
После проверки блогов и публикаций не было найдено реального решения этой случайной проблемы (март 2013 г.). Я не прав ?
kheraud
4
это сводит меня с ума. гугл сломал электронную почту. Я был активен в нескольких связанных темах на форумах Google и не могу получить поддержку. это было нарушено с начала декабря 2013 года.
Натан Бич
Это куда-то ушло? Я выдергиваю волосы. Изображения общедоступны, при переходе к ним загружаются нормально, типы контента совпадают, а прокси-сервер Google не получает ничего, кроме 200 OK в моих журналах. Понятия не имею, почему изображения не отображаются в Gmail.
Мэтт Брунмайер

Ответы:

83

Я думаю, что разобрался с проблемой GoogleImageProxy.

Это что-то связано с концепцией CACHING. Предположим, вы недавно развернули свой php-код на своем сервере, но забыли загрузить изображения. вы однажды протестировали логику электронной почты. ваша система сгенерировала электронное письмо в формате HTML. Когда это письмо попадет на сервер Gmail, GoogleImageProxy попытается получить и сохранить изображения с вашего сайта на своем собственном прокси-сервере. при загрузке изображений GoogleImageProxy обнаружил около 404 статусов для ваших отсутствующих изображений и 403 для некоторых защищенных изображений. GoogleImagesProxy сохранил эти статусы на своем собственном прокси-сервере.

Теперь попытался открыть свою электронную почту, вы заметили 404 статуса для ваших изображений. Это что-то понятно. Вы сразу поняли, что забыли загрузить некоторые изображения, поэтому вы загрузили их на свой сервер. а также вы установили некоторые разрешения для защищенных изображений.

Теперь все готово. Теперь вы снова пытаетесь запустить свой скрипт php-email. В результате вы получите еще одно письмо в почтовый ящик Gmail или Hotmail. вы устранили все проблемы с вашими изображениями. Теперь изображения должны отображаться в вашем электронном письме. но вы по-прежнему не видите изображения.

А, возможно, вы забыли очистить кеш браузера. Очистите кеш браузера и снова загрузите страницу Gmail или Hotmail. Но результат будет все тот же. Попробуйте применить десятки исправлений / патчей и попробуйте запустить свой скрипт php-email тысячи раз. Но результат будет все тот же. Без улучшения.

НАСТОЯЩАЯ ПРОБЛЕМА

Что, черт возьми, происходит? Позвольте мне вам это объяснить. Зайдите в свой журнал доступа и попробуйте найти запросы от GoogleImageProxy. Вы будете удивлены, увидев, что от GoogleImageProxy будет всего 2 или 3 трех запроса в зависимости от количества различных изображений, используемых в вашем письме. GoogleImageProxy никогда не пытался получить изображения даже после того, как вы устранили проблемы с изображениями, загрузив отсутствующие изображения и установив разрешения для защищенных изображений. Зачем? Очистка кеша вашего браузера не влияет. GoogleImageProxy никогда не получит свежие изображения даже для вашей новой электронной почты, потому что изображения теперь кэшируются в GoogleImageProxy вместе с их последним кодом состояния, а не кешируются в вашем собственном браузере.

GoogleImageProxy устанавливает собственную дату истечения срока действия изображений. Думаю один месяц. так что теперь новая копия изображений будет получена по истечении срока годности. Я имею в виду через месяц. Вы не можете заставить GoogleImageProxy получать изображения. Но для вас важно отображать изображения в электронной почте. Что может быть решением?

РЕШЕНИЕ

Ниже приведен единственный способ заставить GoogleImageProxy получать ваши изображения.

  • Переименуйте свои изображения во что-нибудь другое, используя только расширения png, jpg или gif.
  • Не используйте в URL-адресе изображения какие-либо строки запроса, например ?t=34343
  • ваше изображение должно включать png, jpg или gif в качестве расширения.
  • URL-адрес вашего изображения должен быть напрямую сопоставлен с вашим изображением.
  • Если вам нужно использовать прокси-адрес для ваших защищенных изображений, ваш ответ должен содержать правильный заголовок, например Content-Type: image/jpeg
  • Расширение файла и заголовок типа содержимого должны совпадать.
  • Код статуса должен быть 200 вместо 403, 500 и т. Д.

ВАЖНАЯ ЗАМЕТКА

Попробуйте повторять весь процесс для каждого запуска скрипта php-email. потому что каждый раз GoogleImageProxy будет кэшировать ваши изображения, и вам придется повторять один и тот же процесс для каждой новой попытки.

Надеюсь, это решит проблему для большинства людей.

Малик Ахмед Хан Аван
источник
9
tl; dr: вы, вероятно, используете .svg, вместо этого используйте .png .jpg или .gif
taylorstine
2
да, не используйте svg;)
Alexandre Martini
1
У нас был образ, обслуживаемый из хранилища BLOB-объектов Azure, в имени которого был пробел. Изображение некорректно отображается в Gmail. Когда мы удалили пробел в имени файла, проблема была решена.
Narthring
1
@AlexandreMartini, почему бы не использовать SVG? Логотип лучше всего в SVG, не так ли?
trainoasis
1
Убедитесь, что вы указали URL-адреса для путей к изображениям. У нас был пробел в пути, и хотя браузеры заменяют его на% 20, в кэше Gmail его нет и он считает это неработающей ссылкой.
Чад Ричардсон
29

Судя по вашему примеру, похоже, что вы используете традиционные расширения (.jpg, .png, .gif). Некоторые люди в этой теме , описывая те же проблемы, с которыми вы сталкиваетесь, заявили, что использование этих расширений решает проблему.

Другие возможные решения:

JSuar
источник
1
Это множество источников, которые я нашел, исследуя эту проблему сам, но, к сожалению, ни один из них не дал мне ответа, который я ищу. Я все еще надеюсь, что Google решит эту проблему, прежде чем мне удастся найти ответ
RonnyKnoxville,
@JackalopeZero пробовали ли вы самостоятельно воспроизвести эту проблему вне информационного бюллетеня? Я попробовал это на своем личном и корпоративном Gmail с успешными результатами. Я знаю, что это проблема, но, возможно, создание нового письма с изображениями может пролить свет на то, что происходит.
JSuar
4
Спасибо за подсказку о расширениях. Я использовал .svgизображения, и подтверждено, что они не поддерживаются прокси-сервером Google.
Ник Меррилл
1
Я сам столкнулся с этим сегодня. Для меня прокси Google выдавал ошибку 500 для прозрачности 1x1 pixel.gif. Изменив его на прозрачный 1x1, pixel.pngпрокси-сервер заработал, как ожидалось. Странно.
deefour
8

У меня была аналогичная проблема, но она была вызвана длиной URL-адреса. Google генерирует следующий URL-адрес при кешировании изображения из Gmail:

https://ci4.googleusercontent.com/proxy/[hash]#[url])

Сгенерированный хеш основан на URL-адресе изображения, но размер будет зависеть от используемых символов. Я провел несколько тестов с URL-адресами разного размера и обнаружил, что кэшированное изображение не будет загружаться последовательно (400 / Invalid Request), если хэш длина превышает 2076 символов (близко к 2048 байтам + мета? Не уверен).

Опять же, URL-адрес изображения может генерировать хэш, который превышает это количество символов на ~ 1000 специальных символов или более 1500 простых символов. Если длина хэша превышает 2076 символов, запрос не выполняется.

Я понимаю, что это старый пост, но, надеюсь, это поможет другим разработчикам искать в Google

Махди Монтгомери
источник
6

Я знаю, что это старый вопрос, но со мной случилось то же самое. Когда я проверил свои журналы доступа, вот что я обнаружил -

www.example.ca 66.249.85.50 - - [10/Apr/2014:17:57:18 -0400] "GET /newsletters/Apr10_2014/cad/cad2.jpg HTTP/1.1" 403 457 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (via ggpht.com GoogleImageProxy)" 

Вы можете видеть, что мой сервер блокировал GOOGLEIMAGEPROXY, давая ему ответ 403 Forbidden . Я решил проверить свой .htaccess и, конечно же, заблокировал термин ПРОКСИ . После удаления термина изображения теперь отображаются в Gmail нормально. Надеюсь, это поможет.

Маниш Прадхан
источник
У меня тоже был 403. Я выяснил, что mod_security блокирует прокси Google ...
Питер,
2
Это была именно та проблема, которая у меня была. Вы можете проверить, есть ли у вас такая же проблема с конфигурацией, используя curl:curl -I --user-agent "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (via ggpht.com GoogleImageProxy)" -X GET https://example.com/your-image.png
Дэйв Тир,
3

Расположение изображений HTTPS кешируется. Некоторые из наших производственных сред не имеют проблем с gmail проксированием местоположений изображений с использованием HTTPS uri. Я мог видеть, как Gmail игнорирует ваш контент, если сертификат SSL каким-то образом недействителен.

DDS
источник
Спасибо за обновление. Хотя это было некоторое время назад, я так и не нашел решения для этого ответа
RonnyKnoxville
В зависимости от моего текущего опыта попыток создания html-писем с включенными изображениями и с протоколами https я подтверждаю, что это зависит от сертификата. Используя Let's encrypt без организации, изображение блокируется в Gmail. При использовании фирменного сертификата с включенной организацией изображение хорошо видно. Так что я предполагаю, что это либо бесплатные или фирменные сертификаты, либо заявленная в нем организация.
Tritof
3

Я только что попробовал, после замены изображения (без изменения имени изображения)

  • Откройте электронную почту в новом браузере, появится новое изображение

  • Ctrl + f5 (принудительное обновление кеша) в Chrome (мой браузер по умолчанию), также показывает новое изображение

сафин чако
источник
1

Убедитесь, что тип содержимого, возвращаемый для файла изображения вашим сервером, правильный.

Вы можете проверить это с помощью Fiddler.

Softlion
источник
1

В моем случае проблема была в размере файла, он был 22 Мб (я правильно знаю?), И после того, как мы уменьшили размер, все стало работать как шарм.

Проверьте размер файла и, если он слишком большой, сожмите его.

vishes_shell
источник
Хорошо поймал. Сообщение об ошибке Gmail создает впечатление, что это была ошибка ввода или ошибка разрешений, что вводило в заблуждение.
Luminaire
1

Я знаю, что это старый вопрос, но я столкнулся с этой проблемой. В моем случае изображения хранятся в Google Cloud Storage. Что интересно, это ссылка

https://storage.cloud.google.com/{bla_bla}/logo.png

возвращает 307 (временное перенаправление) и Locationзаголовок, содержащий что-то вроде

https://{xxx}-apidata.googleusercontent.com/{bla-bla_bla}/logo.png?{zzz}

Похоже, GoogleImageProxy некорректно обрабатывает 307

Асказаков
источник
Это правда, мне нужно было настроить балансировщик нагрузки и CDN с моим бэкэндом в качестве корзины, теперь мои изображения корректно работают в облачном хранилище
Вендел Насименто
0

У меня есть идеальное решение этой проблемы, которое сработало для меня, если вы используете PHPMailer, тогда вам просто нужно добавить еще одну опцию в PHPMailer для прикрепления такого изображения

$mail = new PHPMailer(); $mail->AddEmbeddedImage('../absolutepath/image/image.jpg', 'logoimg', '../absolutepath/image/image.jpg');

Здесь мы указали абсолютный путь изображения и дали ему имя, называемое «logoimg» или как хотите.

Теперь вы можете добавить этот логотип в любое место вашего HTML-кода следующим образом

$mail->Body = " <h1>Test of PHPMailer html body with image</h1> <p>This is a test picture: <img src=\"cid:logoimg\" /></p>"; $mail->send();

Вот и все.

Арджун Чоудхари
источник
0

У меня была эта проблема, когда я отправлял гифки. Я обнаружил, что размер файла имеет значение для прокси-сервера Googles. Я предлагаю сделать файлы как можно меньше и посмотреть, сработает ли это. Вы можете использовать свою учетную запись Gmail и добавить фотографию с URL-адреса для тестирования. Если гифка появится, когда вы пишете письмо, ее можно будет получить.

счастливого кодирования.

AtLeastTheresToast
источник
0
  1. От Outook / hotmail работает? Тогда мы сможем изолировать это как проблему Google. В вашем случае это не так.
  2. Размер изображения может быть проблемой. Попробуй уменьшить это и увидеть
  3. www.mysite.com этот сайт может быть доступен из вашей системы. Но доступно ли это также с сервера Google?
  4. Попробуйте изменить расширение ... это уловка: возможно, вы пробовали несколько вещей, но оно все равно будет извлекаться из кеша (что сводит на нет ваши усилия), но когда расширение изменяется, оно извлекается снова, и вся работа, которую вы делали раньше, вступает в игру, и если это работает, вы можете подумать, что это «расширение» сделало свое дело !! (как и многие из тех, кто говорит о расширениях)
Синие облака
источник
0

В моем случае столкновения с этой проблемой проблема заключалась в том, что случайно путь к изображению в шаблоне электронной почты имел тройные косые черты в URL-адресе, например https:///content.example.org/image.png. Это было трудно обнаружить, и хотя он работал в других почтовых клиентах, которые могли успешно разрешить URL-адрес, прокси-сервер изображений Google не смог его обработать и привел к 404 для прокси-адреса изображения.

Адам Рейс
источник
-1

Убедитесь, что Gmail запрашивает ваше изображение http, а не https.

Допустим, ваш обычный URL-адрес изображения:

https://www.mysite.com/images/pic1.jpg

Так что измените на:

http://www.mysite.com/images/pic1.jpg

У меня есть сильное чувство, что прокси Google не кеширует https.

Педро Вагнер
источник
Хороший момент, сайт определенно использует https, так что это могло быть причиной
RonnyKnoxville
19
«У меня есть сильное чувство, что прокси-сервер Google не кеширует https». - ваше ощущение неправильное
Will
1
Это сработало! Я пытался скопировать и вставить ячейку электронной таблицы Google, содержащую внешнее изображение, в электронное письмо, используя http, поскольку протокол работал.
График
Это неправильно, почему Google не может кэшировать изображение через https?
southpaw93
Google ничего не упомянул о судебном иске против https, так что сильные чувства напрасны
Blue Clouds
-7

Это 6 марта, и вы, наверное, уже догадались, но подумали, что я вмешаюсь, чтобы помочь другим. Я обнаружил, что файлы JPG не работают в Gmail. Формат PNG отлично работает. Извините, я не могу объяснить почему, но иногда лучше не спрашивать почему. Используйте PNG!

МэриМ
источник
Я не могу поверить, что Google действительно сочтет это решением. Несмотря на это, я собираюсь попробовать, потому что наши информационные бюллетени для пользователей Gmail не работают.
Натан Бич
Это неправда, Gmail поддерживает jpeg
будет
Поддерживает jpgs
менеджер
Я использую png и получаю ту же проблему.
Эдуардо Нобре