Новое кэширование изображений 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, но я не уверен, что это связано с проблемой.
Ответы
Ответ 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();
Это все.
Ответ 11
use .png or .jpg
otherwise image will not render
URL добавить автоhttps://ci3.googleusercontent.com/proxy/jTpYlM6RUv7Wi8Hxjha4fzExKFy9mjyh133MKKfo3FuV3toLToG6zJcA0IAdIMEW75pY6pkEd2aOSVhWIn0A82q-24YaAd-_k00wIMHwIuUBiy9vEGrMpAW73HaHQmViuESP7A=s0-d-e1-ft#
Ответ 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!