Новое кэширование изображений 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, но я понятия не имею, как решить эту проблему.



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

829   11  

11 ответов:

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

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

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

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

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

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

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

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

РЕШЕНИЕ

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

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

ВАЖНОЕ ПРИМЕЧАНИЕ

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

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

на основе вашего примера, похоже, что вы используете традиционные расширения (.формат JPG. ,формат PNG. ,файл GIF.) некоторые люди в этой теме, описывая те же проблемы, с которыми вы сталкиваетесь, заявили, что использование этих расширений решает проблему.

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

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

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

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

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

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

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

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

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

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

  • открыть письмо в новом браузере , он показывает новое изображение

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

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

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

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

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

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

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

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

изменить так, чтобы:

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

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

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

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

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

теперь вы можете добавить этот 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();

вот и все.

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

Comments

    Ничего не найдено.