Подтвердить что ты не робот

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

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

До недавнего времени они работали нормально. Теперь Новая система 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 ничего нет.

Email showing image errors

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

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

4b9b3361

Ответ 1

Я думаю, что выяснил проблему с GoogleImageProxy.

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

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

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

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

РЕАЛЬНАЯ ПРОБЛЕМА

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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 Запретный. Я решил проверить мой .htaccess и, конечно же, заблокировал термин PROXY. После удаления термина изображения теперь отображаются в Gmail. Надеюсь, что это поможет.

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

Предположим, что ваш обычный URL изображения:

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

Итак, измените на:

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

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

Ответ 10

У меня есть идеальное решение этой проблемы, которое сработало для меня, если вы используете 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();

Это все.

Ответ 12

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

Удачного кодирования.

Ответ 13

Я знаю, что это старый вопрос, но я встретил эту проблему. В моем случае изображения хранятся в 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 правильно

Ответ 14

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