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


чи є на вашому сервері функція захисту або логіка, що обслуговує зображення? він доступний лише протягом обмеженого часу або такі функції?
Піксу

Немає жодної функції захисту або системи входу для перегляду зображень, вони знаходяться в загальнодоступній папці системи. Якщо ви відвідуєте оригінальне посилання, зображення можна переглянути. Проблема полягає в тому, що переписування URL-адреси Google або не завантажує зображення на їх сервери, або неправильно спрямовує користувача на мій сайт.
RonnyKnoxville

1
Після огляду блогів та публікацій не знайдено реального вирішення цього випадкового випуску (березень 2013 р.). Я неправий ?
kheraud

4
це мене дуже божевільно. google зламав електронну пошту. Я був активним у кількох споріднених темах на форумах google і не можу отримати ніякої тяги. це було порушено з початку грудня 2013 року
Натан Біч,

Це кудись пішло? Я витягаю волосся. Зображення є загальнодоступними, добре завантажуються при прямому переході до них, відповідність типу вмісту та проксі-сервер google в моїх журналах не отримує нічого, крім 200 ОК. Я поняття не маю, чому зображення не відображатимуться в gmail.
Метт Брунмейер

Відповіді:


83

Я думаю, я вирішив проблему GoogleImageProxy.

Це щось, що стосується концепції CACHING. припустимо, ви нещодавно розгорнули свій 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-адресу зображення потрібно відображати безпосередньо на вашому зображенні.
  • Якщо вам потрібно використовувати якийсь URL-адрес проксі-сервера для захищених зображень, тоді ваша відповідь повинна містити належний заголовок, як-от Content-Type: image/jpeg
  • Розширення та заголовок типу вмісту повинні відповідати
  • Статус-код повинен бути 200 замість 403, 500 тощо

ВАЖЛИВА ПРИМІТКА

Спробуйте повторити весь процес для кожного запуску сценарію php-email. оскільки кожен раз GoogleImageProxy кешуватиме ваші зображення, і вам доведеться повторювати той самий процес для кожної нової спроби.

Сподіваємось, це вирішить проблему для більшості людей.


9
tl; dr: ви, ймовірно, використовуєте .svg, використовуйте .png .jpg або .gif замість цього
taylorstine

2
так, не використовуй svg;)
Олександр Мартіні

1
У нас було подано зображення із Azure Blob Storage, на якому було пробіл у назві файлу. Зображення не відображатиметься належним чином у Gmail. Коли ми видалили пробіл у імені файлу, це вирішило проблему.
Наррінг

1
@AlexandreMartini чому б не використовувати SVG? Логотип найкращий у SVG, ні?
trainoasis

1
Переконайтеся, що ви urlencode ваших зображень шляхів. У нас був пробіл у шляху, і хоч браузери замінять його на% 20, кеш-пам'ять gmail не має, і вважає його ламаною ланкою.
Чад Річардсон

29

На основі вашого прикладу виглядає, що ви використовуєте традиційні розширення (.jpg, .png, .gif). Деякі люди з цієї теми, описуючи ті самі проблеми, з якими ви стикаєтесь, заявили, що використання цих розширень вирішує проблему.

Інші можливі рішення:


1
Це багато джерел, які я знайшов, коли сам досліджував цю проблему, на жаль, жодне з них не дає мені відповіді, яку я шукав. Я все ще сподіваюся, що Google вирішить цю проблему, перш ніж мені вдасться знайти відповідь
RonnyKnoxville

@JackalopeZero Ви намагалися самостійно повторити цю проблему поза інформаційним бюлетенем? Я спробував це на особистому і фірмовому gmail з успішними результатами. Я знаю, що це проблема, але, можливо, створення нової електронної пошти із зображеннями може пролити світло на те, що відбувається.
JSuar

4
Дякуємо за пораду щодо розширень. Я використовував .svgзображення, і підтверджується, що він не підтримує проксі Google.
Нік Меррілль

1
Я сьогодні наткнувся на це сам. Для мене проксі-сервер Google кинув помилку 500 для 1х1 прозорого pixel.gif. Змінивши це на прозорий 1x1, pixel.pngпроксі-сервер подається, як очікувалося. Дивно.
deefour

8

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

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

Генерований хеш ґрунтується на URL-адресі зображення, але розмір буде змінюватися залежно від використовуваних символів. Я провів кілька тестів з URL-адресами різного розміру, і виявив, що кешоване зображення не буде завантажуватися послідовно (400 / Недійсний запит), якщо хеш перевищує 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 Заборонено . Я вирішив перевірити свій .htaccess і досить впевнений, що я блокував термін PROXY . Після видалення цього терміну зображення в 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-урі. Я можу побачити gmail, який ігнорує ваш вміст, якщо сертифікат SSL якимось чином недійсний.


Дякуємо за оновлення. Хоча це було певний час тому, зараз я так і не знайшов рішення на цю відповідь
RonnyKnoxville

Залежно від мого поточного досвіду, що намагається створити HTML-листи з включеними зображеннями та протоколами https, я підтверджую, що це залежить від сертифіката. Використовуючи давайте шифруємо, якщо в ньому немає організації, зображення блокується в Gmail. Під час використання фірмового сертифіката з включеною організацією добре відображається зображення. Тож я здогадуюсь, що це або безкоштовні сертифікати фірми, або організація, заявлена ​​в них
Трітоф

3

Я щойно спробував, замінивши зображення (без зміни назви зображення)

  • Відкрийте електронний лист у новому браузері, він показує нове зображення

  • Ctrl + f5 (примушує оновити кеш) у chrome (мій браузер за замовчуванням), також показує нове зображення


1

Переконайтесь, що тип вмісту, повернутий для файлу зображення вашим сервером правильним.

Ви можете перевірити це за допомогою Fiddler.


1

У моєму випадку проблема з розміром файлу становила 22 Мб (я знаю правильно?), І після зменшення розміру все почало працювати як шарм.

Перевірте розмір файлу, і якщо він занадто великий, стисніть його.


Гарний улов. Повідомлення про помилку Gmail здається, що це була помилка введення тексту або помилки дозволів, що було дуже оманливим.
Світильник

1

Я знаю, що це старе питання, але я зустрів цю проблему. У моєму випадку зображення зберігаються в Cloud 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 з моїм бекендом як відро, тепер мої зображення працюють правильно на хмарному сховищі
Wendel Nascimento

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

У мене виникла ця проблема, коли я надсилала gifs. Я виявив, що розмір файлу має значення для сервера Googles Proxy. Я пропоную зробити файли якомога меншими і побачити, чи це працює. Ви можете використовувати свій обліковий запис Gmail і додати фотографію з URL-адреси для тестування. Якщо gif з'явиться під час написання електронної пошти, він буде отриманий.

щасливе кодування.


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." - ваше почуття неправильне
Буде

1
Це спрацювало! Я намагався скопіювати та вставити клітинку електронної таблиці Google, яка містила зовнішнє зображення, в електронний лист, використовуючи http для роботи протоколу.
Графік

Це неправильно, чому Google не зможе кешувати зображення через https?
southpaw93

Google нічого не згадував про позов проти https, тому сильне почуття даремно
Blue Clouds

-7

Настав 6 березня, і ви, мабуть, уже розібралися в цьому, але подумали, що я б подзвонив, щоб допомогти іншим. Я виявив, що JPG не працюють у Gmail. Формат PNG чудово працює. Вибачте, я не можу пояснити, чому, але іноді краще не питати, чому. Використовуйте PNG!


Я не можу повірити, що Google насправді вважатиме це рішенням. Незважаючи на те, що я спробую це зробити, оскільки наші розсилки розбиті для користувачів Gmail.
Натан Біч

Це не так, Gmail робить підтримку JPEGs
Буде чи

Він підтримує jpgs
managerger

Я використовую png і отримаю ту ж проблему.
Едуардо Нобре
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.