it-swarm.com.de

Das neue Bild-Caching von Google Mail bricht die Bild-Links im Newsletter

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

Bis vor kurzem funktionierten sie gut. Jetzt Das neue System von Google schreibt die Bilder neu und speichert sie in ihrem Cache (angeblich)

Durch das Umschreiben meiner Bildlinks durch Google werden diese jedoch vollständig zerstört, was zu einem Fehler von 500 und einem fehlerhaften Link-Image führt.

Nehmen wir an, meine normale Image-URL lautet:

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

Google schreibt dies folgendermaßen um:

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

Diese URL enthält jedoch nichts.

Email showing image errors

Entweder stimmt etwas nicht mit den Links, die von Google erstellt werden, oder die Bilder werden einfach nicht auf den Google-User-Content-Server hochgeladen.

Ich benutze PHP, die phpmailer-Bibliothek und einen Ubuntu-Server auf Amazon EC2, aber ich bin mir nicht sicher, ob das Problem damit zusammenhängt.

68
JackalopeZero

Ich denke, ich habe das Problem mit GoogleImageProxy herausgefunden.  

Dies ist etwas, was mit dem CACHING-Konzept zusammenhängt. Angenommen, Sie haben kürzlich Ihren PHP-Code auf Ihrem Server bereitgestellt, haben 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 den Google Mail-Server gelangt, versucht GoogleImageProxy, die Bilder von Ihrer Website abzurufen und auf ihrem eigenen Proxy-Server zu speichern. Beim Abrufen der Bilder hat GoogleImageProxy einige 404-Status für Ihre fehlenden Bilder und 403 für einige geschützte Bilder gefunden. GoogleImagesProxy hat diese Status auf einem eigenen Proxy-Server gespeichert. 

Nachdem Sie nun versucht haben, Ihre E-Mail zu öffnen, haben Sie einige 404 Status für Ihre Bilder festgestellt. Das ist etwas Verständliches. Sie haben sofort gemerkt, dass Sie vergessen haben, einige Bilder hochzuladen, also haben Sie 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, Ihr PHP-E-Mail-Skript erneut 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 löschen. Leeren Sie den Cache Ihres Browsers und laden Sie die Google Mail- oder Hotmail-Seite erneut. Aber das Ergebnis wird immer noch dasselbe sein. Versuchen Sie, Dutzende von Fixes/Patches anzuwenden, und versuchen Sie, Ihr PHP-E-Mail-Skript tausendfach auszuführen. Aber das Ergebnis wird immer noch dasselbe sein. Keine Verbesserung.

DAS WIRKLICHE PROBLEM

Was zur Hölle ist los? Lass mich es dir erklären. Gehen Sie zu Ihrem Zugriffsprotokoll und versuchen Sie, Anforderungen von GoogleImageProxy zu finden. Sie werden überrascht sein, dass je nach Anzahl der in Ihrer E-Mail verwendeten Bilder nur zwei oder drei drei Anfragen von GoogleImageProxy stammen. GoogleImageProxy hat nie versucht, Bilder abzurufen. Selbst 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 holt die frischen Bilder auch für Ihre neuere E-Mail nie, da die Bilder jetzt mit ihrem letzten Statuscode in GoogleImageProxy und nicht in Ihrem eigenen Browser zwischengespeichert werden. 

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

DIE LÖSUNG

Nur so können Sie GoogleImageProxy zum Abrufen Ihrer Bilder zwingen 

  • Benennen Sie Ihre Bilder mit den Erweiterungen ".png", "jpg" oder "gif" um.
  • Verwenden Sie in Ihrer Bild-URL keine Art von 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 wie Content-Type: image/jpeg enthalten.
  • Die Dateierweiterung und der 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. Jedes Mal, wenn GoogleImageProxy Ihre Bilder zwischenspeichert, müssen Sie denselben Vorgang für jeden neuen Versuch wiederholen.

Hoffentlich wird das Problem für die meisten Menschen behoben.

51

An Ihrem Beispiel sieht es so aus, als würden Sie traditionelle Erweiterungen (.jpg, .png, .gif) verwenden. Einige Leute in diesem Thread , die die gleichen Probleme beschreiben, mit denen Sie zu tun haben, haben angegeben, dass die Verwendung dieser Erweiterungen das Problem löst.

Andere mögliche Lösungen:

25
JSuar

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 Hashwert basiert auf der URL des Bildes, die Größe hängt jedoch von den verwendeten Zeichen ab. Ich führte mehrere Tests mit URLs unterschiedlicher Größe durch und stellte fest, dass das zwischengespeicherte Bild nicht konsistent geladen werden konnte (400/Invalid Request), wenn Hash 2076 Zeichen überschreitet (fast 2048 Byte + Meta? .

Die Bild-URL könnte wiederum einen Hash generieren, der bei 1000 Sonderzeichen oder mehr als 1500 einfachen Zeichen so viele Zeichen überschreitet. Wenn der Hash 2076 Zeichen überschreitet, schlägt die Anforderung fehl.

Ich erkenne, dass dies ein alter Beitrag ist, aber hoffentlich hilft dies anderen Entwicklern beim Durchforsten von Google

6

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

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 dasGOOGLEIMAGEPROXYblockiert hat und ihm eine 403 Forbidden Reply gibt. Ich entschied mich dafür, meinen .htaccess zu überprüfen, und tatsächlich blockierte ich den BegriffPROXY. Nachdem Sie den Begriff entfernt haben, werden die Bilder jetzt in Google Mail einwandfrei angezeigt. Hoffentlich hilft das.

5
Manish Pradhan

Ich habe gerade versucht, Nach dem Ersetzen des Bildes (ohne Änderung des Bildnamens)

  • E-Mail in neuem Browser öffnen, zeigt neues Bild 

  • Strg + F5 (erzwingt eine Cache-Aktualisierung) im Chrome (mein Standardbrowser), Zeigt auch ein neues Bild

3
safin chacko

HTTPS-Image-Speicherorte werden zwischengespeichert. In einigen unserer Produktionsumgebungen gibt es keine Probleme mit der Verwendung von gmail-fähigen Image-Positionen mit einem HTTPS-URI. Ich könnte sehen, dass Google Mail Ihren Inhalt ignoriert, wenn das SSL-Zertifikat auf irgendeine Weise ungültig ist.

2
DDS

In meinem Fall war die Größe der Datei das Problem, sie betrug 22 MB (ich weiß es?), Und nachdem wir die Größe reduziert hatten, funktionierte alles wie ein Zauber.

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

1
vishes_shell

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

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

1
Softlion

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

Nehmen wir an, Ihre normale Bild-URL lautet:

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

Also wechseln Sie zu:

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

Ich habe das starke Gefühl, dass der Proxy von Google https nicht zwischenspeichert.

0
Pedro Vagner
0
Naved Khan

Ich hatte dieses Problem, als ich Gifs verschickte. Ich fand, 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 ein Foto von einer URL zum Testen hinzufügen. Wenn das GIF beim Verfassen Ihrer E-Mail angezeigt wird, kann es empfangen werden.

fröhliche Kodierung.

0

Ich habe eine perfekte Lösung für dieses Problem, das für mich funktioniert hat, wenn Sie PHPMailer verwenden. Dann müssen Sie in PHPMailer eine weitere Option hinzufügen, um ein Bild wie dieses anzufügen

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

Hier haben wir den absoluten Pfad des Bildes angegeben und nennen es den Namen "logoimg" oder wie auch immer Sie es wünschen.

Jetzt können Sie dieses Logo überall dort 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
Arjun Choudhary