Durch das neue Bild-Caching in Google Mail werden Bildlinks im Newsletter unterbrochen


102

Ich habe einige automatische E-Mails, die nach Abschluss der Anmeldung für meine Website gesendet werden.

Bis vor kurzem haben sie gut funktioniert. Jetzt schreibt das neue System von Google die Bilder neu und speichert sie (angeblich) im Cache.

Durch das neue Umschreiben meiner Bildlinks durch Google werden diese jedoch vollständig beschädigt, was zu einem Fehler von 500 und einem fehlerhaften Linkbild führt.

Nehmen wir an, meine normale Bild-URL lautet:

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

Google schreibt dies um in:

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

An dieser URL befindet sich jedoch nichts.

E-Mail mit Bildfehlern

Entweder stimmt etwas mit den von Google erstellten Links nicht oder die Bilder werden nicht auf den googleusercontent-Server hochgeladen, aber ich habe keine Ahnung, wie das Problem behoben werden kann.

Ich verwende PHP, die phpmailer-Bibliothek und einen Ubuntu-Server auf Amazon EC2, bin mir aber nicht sicher, ob dies mit dem Problem zusammenhängt.


Haben Sie eine Sicherheitsfunktion in Ihrem Server oder eine Logik, die das Image bedient? ist es nur für eine begrenzte Zeit verfügbar oder diese Art von Funktionen?
Pixou

Es gibt keine Sicherheitsfunktion oder kein Anmeldesystem zum Anzeigen der Bilder. Sie befinden sich in einem öffentlichen Ordner im System. Wenn Sie den ursprünglichen Link besuchen, sind die Bilder sichtbar. Das Problem ist, dass das Umschreiben der URL durch Google das Bild entweder nicht auf die Server hochlädt oder den Nutzer nicht korrekt auf meine Website weiterleitet.
RonnyKnoxville

1
Nach der Überprüfung von Blogs und Posts wurde für dieses zufällige Problem (März 2013) keine echte Problemumgehung gefunden. Ich liege falsch ?
Kheraud

4
das macht mich absolut verrückt. Google hat E-Mail gebrochen. Ich war in mehreren verwandten Threads in den Google-Foren aktiv und kann keine Traktion bekommen. Dies ist seit Anfang Dezember 2013 gebrochen.
Nathan Beach

Ist das irgendwohin gegangen? Ich ziehe mir die Haare aus. Bilder sind öffentlich zugänglich, können problemlos geladen werden, wenn sie direkt aufgerufen werden. Der Inhaltstyp stimmt überein, und der Proxyserver von Google erhält nur 200 OKs in meinen Protokollen. Ich habe keine Ahnung, warum die Bilder nicht in Google Mail angezeigt werden.
Matt Brunmeier

Antworten:


83

Ich glaube, ich habe das Problem mit GoogleImageProxy herausgefunden.

Dies hängt mit dem CACHING-Konzept zusammen. Angenommen, Sie haben kürzlich Ihren PHP-Code auf Ihrem Server bereitgestellt, aber vergessen, Bilder hochzuladen. Sie haben einmal mit Ihrer E-Mail-Logik getestet. Ihr System hat eine HTML-E-Mail generiert. Wenn diese E-Mail auf dem Google Mail-Server eingeht, versucht GoogleImageProxy, die Bilder von Ihrer Website auf einem eigenen Proxyserver abzurufen und zu speichern. Beim Abrufen der Bilder hat GoogleImageProxy 404 Status für Ihre fehlenden Bilder und 403 für einige geschützte Bilder gefunden. GoogleImagesProxy hat diese Status auf einem eigenen Proxyserver gespeichert.

Beim Versuch, Ihre E-Mail zu öffnen, haben Sie 404 Status für Ihre Bilder festgestellt. Das ist etwas Verständliches. Sie haben sofort festgestellt, dass Sie vergessen haben, einige Bilder hochzuladen, und haben sie auf Ihren Server hochgeladen. Außerdem haben Sie einige Berechtigungen für geschützte Bilder festgelegt.

Sie sind jetzt alle fertig. Jetzt versuchen Sie erneut, Ihr PHP-E-Mail-Skript auszuführen. Als Ergebnis erhalten Sie eine weitere E-Mail in Ihrem Google Mail- oder Hotmail-Posteingang. Sie hatten alle Probleme mit Ihren Bildern behoben. Jetzt müssen die Bilder in Ihrem E-Mail-Inhalt angezeigt werden. Sie können die Bilder jedoch immer noch nicht sehen.

Ah, möglicherweise haben Sie vergessen, den Cache Ihres Browsers zu leeren. Leeren Sie den Cache Ihres Browsers und laden Sie die Google Mail- oder Hotmail-Seite erneut. Aber das Ergebnis wird immer noch das gleiche sein. Versuchen Sie, Dutzende von Fixes / Patches anzuwenden und Ihr PHP-E-Mail-Skript tausendmal auszuführen. Aber das Ergebnis wird immer noch das gleiche sein. Keine Verbesserung.

DAS ECHTE PROBLEM

Was zur Hölle ist los? Lass es mich dir erklären. Gehen Sie zu Ihrem Zugriffsprotokoll und versuchen Sie, Anfragen von GoogleImageProxy zu finden. Sie werden überrascht sein, dass nur zwei oder drei Anfragen von GoogleImageProxy eingehen, abhängig von der Anzahl der verschiedenen Bilder, die in Ihrer E-Mail verwendet werden. GoogleImageProxy hat nie versucht, Bilder abzurufen. Auch nachdem Sie die Probleme mit Ihren Bildern behoben haben, indem Sie fehlende Bilder hochgeladen und Berechtigungen für geschützte Bilder festgelegt haben. Warum? Das Löschen des Cache Ihres Browsers hat keine Auswirkungen. GoogleImageProxy ruft auch für Ihre neuere E-Mail niemals die neuen Bilder ab, da die Bilder jetzt zusammen mit ihrem letzten Statuscode in GoogleImageProxy zwischengespeichert und nicht in Ihrem eigenen Browser zwischengespeichert werden.

GoogleImageProxy hat ein eigenes Ablaufdatum für die Bilder festgelegt. Ich denke einen Monat. Jetzt wird die neue Kopie der Bilder nach dem Ablaufdatum abgerufen. Ich meine nach einem Monat. Sie können GoogleImageProxy nicht zwingen, die Bilder abzurufen. Es ist jedoch wichtig, dass Sie Bilder in Ihrer E-Mail anzeigen. Was kann die Lösung sein?

DIE LÖSUNG

Das Folgende ist die einzige Möglichkeit, GoogleImageProxy zum Abrufen Ihrer Bilder zu zwingen

  • Benennen Sie Ihre Bilder nur mit PNG-, JPG- oder GIF-Erweiterungen in etwas anderes um.
  • Verwenden Sie in Ihrer Bild-URL keine Abfragezeichenfolge wie ?t=34343
  • Ihr Bild muss PNG, JPG oder GIF als Erweiterung enthalten.
  • Ihre Bild-URL muss direkt auf Ihr Bild abgebildet werden.
  • Wenn Sie eine Proxy-URL für Ihre geschützten Bilder verwenden müssen, muss Ihre Antwort den richtigen Header enthalten Content-Type: image/jpeg
  • Dateierweiterung und Inhaltstyp-Header müssen übereinstimmen
  • Der Statuscode muss 200 statt 403, 500 usw. Sein

WICHTIGE NOTIZ

Versuchen Sie, den gesamten Vorgang für jede Ausführung des PHP-E-Mail-Skripts zu wiederholen. Denn jedes Mal, wenn GoogleImageProxy Ihre Bilder zwischenspeichert, müssen Sie den gleichen Vorgang bei jedem neuen Versuch wiederholen.

Hoffentlich wird dies das Problem für die meisten Menschen beheben.


9
tl; dr: Sie verwenden wahrscheinlich .svg, verwenden Sie stattdessen .png .jpg oder .gif
Taylorstine

2
Ja, benutze kein SVG;)
Alexandre Martini

1
Wir hatten ein Image aus Azure Blob Storage, das ein Leerzeichen im Dateinamen enthielt. Das Bild wird in Google Mail nicht richtig angezeigt. Als wir das Leerzeichen im Dateinamen entfernt haben, wurde das Problem behoben.
Narthring

1
@AlexandreMartini warum nicht SVG verwenden? Logo ist am besten in SVG, nein?
Trainoasis

1
Stellen Sie sicher, dass Sie Ihre Bildpfade urlencodieren. Wir hatten ein Leerzeichen im Pfad, und obwohl Browser es durch% 20 ersetzen, funktioniert der Google Mail-Cache nicht und betrachtet es als fehlerhaften Link.
Chad Richardson

28

Anhand Ihres Beispiels scheinen Sie herkömmliche Erweiterungen (.jpg, .png, .gif) zu verwenden. Einige Leute in diesem Thread , die dieselben Probleme beschreiben, mit denen Sie konfrontiert sind, haben angegeben, dass die Verwendung dieser Erweiterungen das Problem löst.

Andere mögliche Lösungen:


1
Dies sind viele der Quellen, die ich gefunden habe, als ich dieses Problem selbst untersucht habe. Leider gibt mir keine von ihnen die Antwort, nach der ich suche. Ich hoffe immer noch, dass Google dieses Problem beheben wird, bevor ich eine Antwort finde
RonnyKnoxville

@JackalopeZero Haben Sie versucht, dieses Problem außerhalb des Newsletters unabhängig zu replizieren? Ich habe es in meinem persönlichen und Unternehmens-Google Mail mit erfolgreichen Ergebnissen versucht. Ich weiß, dass es ein Problem ist, aber vielleicht könnte das Erstellen einer neuen E-Mail mit Bildern Aufschluss darüber geben, was passiert.
JSuar

4
Danke für den Tipp zu Erweiterungen. Ich habe .svgBilder verwendet, und es wird bestätigt , dass diese vom Google-Proxy nicht unterstützt werden.
Nick Merrill

1
Ich bin heute selbst darauf gestoßen. Für mich hat Googles Proxy einen 500-Fehler für 1x1 transparent ausgelöst pixel.gif. Wenn Sie dies auf 1x1 transparent ändern, wird pixel.pngder Proxy wie erwartet bereitgestellt. Seltsam.
Deefour

8

Ich hatte ein ähnliches Problem, das jedoch durch die Länge der URL verursacht wurde. Google generiert beim Zwischenspeichern eines Bildes aus Google Mail die folgende URL:

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

Der generierte Hash basiert auf der URL des Bildes, die Größe hängt jedoch von den verwendeten Zeichen ab. Ich habe mehrere Tests mit URLs unterschiedlicher Größe durchgeführt und festgestellt, dass das zwischengespeicherte Bild nicht konsistent geladen werden kann (400 / Ungültige Anforderung), wenn der Hash mehr als 2076 Zeichen lang ist (fast 2048 Byte + Meta? Nicht sicher).

Auch hier könnte die Bild-URL einen Hash generieren, der so viele Zeichen mit ~ 1000 Sonderzeichen oder mehr als 1500 einfachen Zeichen überschreitet. Wenn der Hash mehr als 2076 Zeichen lang ist, schlägt die Anforderung fehl.

Mir ist klar, dass dies ein alter Beitrag ist, aber hoffentlich hilft dies anderen Entwicklern, Google zu durchsuchen


6

Ich weiß, dass dies eine alte Frage ist, aber mir ist dasselbe passiert. Als ich meine Zugriffsprotokolle überprüfte, fand ich Folgendes:

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)" 

Sie können sehen, dass mein Server den GOOGLEIMAGEPROXY blockiert hat und ihm eine verbotene Antwort gegeben hat. Ich habe mich entschlossen, meinen .htaccess zu überprüfen und sicher genug, dass ich den Begriff PROXY blockiere . Nach dem Entfernen des Begriffs werden die Bilder jetzt in Google Mail einwandfrei angezeigt. Hoffentlich hilft das.


Ich hatte auch eine 403. Ich habe herausgefunden, dass mod_security den Google-Proxy blockiert ...
Peter

2
Dies war genau das Problem, das ich hatte. Sie können testen, ob Sie das gleiche Konfigurationsproblem mit Curl haben: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
Dave Teare

3

HTTPS-Bildspeicherorte werden zwischengespeichert. Einige unserer Produktionsumgebungen haben keine Probleme mit dem Proxy-Speicherort von Google Mail-Bildern mithilfe einer HTTPS-URL. Ich könnte sehen, dass Google Mail Ihren Inhalt ignoriert, wenn das SSL-Zertifikat in irgendeiner Weise ungültig ist.


Danke für das Update. Obwohl es jetzt eine Weile her ist, habe ich nie eine Lösung für diese Antwort gefunden
RonnyKnoxville

Abhängig von meiner aktuellen Erfahrung beim Erstellen von HTML-E-Mails mit enthaltenen Bildern und mit https-Protokollen bestätige ich, dass dies vom Zertifikat abhängt. Wenn Sie "Verschlüsseln" ohne Organisation verwenden, wird das Bild in Google Mail blockiert. Bei Verwendung eines Markenzertifikats mit der enthaltenen Organisation wird das Bild angezeigt. Ich denke, es ist entweder kostenlos gegen Markenzertifikate oder die darin deklarierte Organisation.
Tritof

3

Ich habe es gerade versucht, nachdem ich das Bild ersetzt hatte (ohne den Bildnamen zu ändern).

  • Öffnen Sie die E-Mail in einem neuen Browser. Es wird ein neues Bild angezeigt

  • Strg + F5 (erzwingt eine Cache-Aktualisierung) im Chrome (meinem Standardbrowser) zeigt auch ein neues Bild an


1

Überprüfen Sie, ob der von Ihrem Server für die Bilddatei zurückgegebene Inhaltstyp korrekt ist.

Sie können dies mit Fiddler überprüfen.


1

In meinem Fall war die Größe der Datei das Problem, es waren 22 MB (ich weiß, richtig?), Und nachdem wir die Größe reduziert hatten, fing alles an, wie ein Zauber zu funktionieren.

Überprüfen Sie die Dateigröße und komprimieren Sie sie, wenn sie zu groß ist.


Schöner Fang. Die Fehlermeldung von Google Mail lässt den Eindruck entstehen, dass es sich um einen Tipp- oder Berechtigungsfehler handelt, der sehr irreführend war.
Leuchte

1

Ich weiß, dass dies eine alte Frage ist, aber ich bin auf dieses Problem gestoßen. In meinem Fall werden Bilder im Google Cloud Storage gespeichert. Interessant ist dieser Link

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

Gibt 307 (temporäre Umleitung) und einen LocationHeader zurück, der so etwas enthält

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

GoogleImageProxy scheint 307 nicht richtig zu verarbeiten


Dies ist wahr, ich musste einen Load Balancer und ein CDN mit meinem Backend als Bucket einrichten, jetzt funktionieren meine Bilder korrekt im Cloud-Speicher
Wendel Nascimento

0

Ich habe eine perfekte Lösung für dieses Problem, die bei mir funktioniert hat. Wenn Sie PHPMailer verwenden, müssen Sie in PHPMailer nur eine weitere Option hinzufügen, um ein solches Bild anzuhängen

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

Hier haben wir den absoluten Pfad des Bildes angegeben und ihm einen Namen namens "logoimg" oder was auch immer Sie wollen.

Jetzt können Sie dieses Logo an einer beliebigen Stelle in Ihrem HTML-Body hinzufügen

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

Das ist alles.



0

Ich hatte dieses Problem, als ich Gifs verschickte. Ich habe festgestellt, dass die Dateigröße für den Googles Proxy-Server von Bedeutung ist. Ich schlage vor, die Dateien so klein wie möglich zu halten und zu prüfen, ob dies funktioniert. Sie können Ihr Google Mail-Konto verwenden und zum Testen ein Foto von einer URL hinzufügen. Wenn das GIF beim Verfassen Ihrer E-Mail angezeigt wird, ist es empfangbar.

fröhliche Codierung.


0
  1. Funktioniert es mit Outook / Hotmail? Es sollte dann können wir es als Google-Problem isolieren. In Ihrem Fall ist es nicht.
  2. Die Größe des Bildes kann ein Problem sein. Versuchen Sie es zu reduzieren und sehen
  3. www.mysite.com Auf diese Site kann von Ihrem System aus zugegriffen werden. Aber ist es auch von Google Server zugänglich?
  4. Versuchen Sie, die Erweiterung zu ändern. Dies ist der Trick: Sie haben möglicherweise mehrere Dinge ausprobiert, aber es wird immer noch aus dem Cache abgerufen (was Ihre Bemühungen ungültig macht), aber wenn sich die Erweiterung ändert, wird es erneut abgerufen und alle zuvor geleistete Arbeit kommt ins Spiel und wenn es funktioniert, man könnte denken, es ist die 'Erweiterung', die den Trick gemacht hat !! (wie viele von denen, die über Erweiterungen sprechen)

0

In meinem Fall war das Problem, dass der Pfad zum Bild in der E-Mail-Vorlage versehentlich dreifache Schrägstriche in der URL aufwies, z https:///content.example.org/image.png. Dies war schwer zu erkennen, und während es in anderen E-Mail-Clients funktionierte, die die URL erfolgreich auflösen konnten, war der Image-Proxy von Google nicht in der Lage, damit umzugehen, und führte zu einem 404 für die Proxy-Image-Adresse.


-1

Stellen Sie sicher, dass Google Mail Ihr Bild anfordert http, nicht https.

Nehmen wir an, Ihre normale Bild-URL lautet:

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

Wechseln Sie also zu:

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

Ich habe das starke Gefühl, dass Googles Proxy nicht zwischengespeichert wird https.


Guter Punkt, die Website verwendet definitiv https, so dass die Ursache gewesen sein könnte
RonnyKnoxville

19
"Ich habe das starke Gefühl, dass Googles Proxy https nicht zwischenspeichert." - Ihr Gefühl ist falsch
Will

1
Das hat funktioniert! Ich habe versucht, eine Google-Tabellenzelle, die ein externes Bild enthielt, zu kopieren und in eine E-Mail einzufügen, wobei http als Protokoll verwendet wurde.
Grafik

Dies ist falsch. Warum kann Google das Bild nicht über https zwischenspeichern?
Southpaw93

Google hat nichts über eine Klage gegen https erwähnt, daher ist das starke Gefühl verschwendet
Blue Clouds

-7

Es ist der 6. März und Sie haben das wahrscheinlich schon herausgefunden, aber ich dachte, ich würde mich einschalten, um anderen zu helfen. Ich habe festgestellt, dass JPGs in Google Mail nicht funktionieren. Das PNG-Format funktioniert hervorragend. Entschuldigung, ich kann nicht erklären warum, aber manchmal ist es besser nicht zu fragen warum. Verwenden Sie PNG!


Ich kann nicht glauben, dass Google dies tatsächlich als Lösung betrachten würde. Unabhängig davon werde ich es versuchen, da unsere Newsletter für unsere Google Mail-Nutzer zerstört sind.
Nathan Beach

Dies ist nicht wahr, Google Mail unterstützt JPEGs
Will

Es unterstützt jpgs
managerger

L benutze png und bekomme das gleiche Problem.
Eduardo Nobre
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.