La nouvelle mise en cache d'image de Gmail rompt les liens d'image dans la newsletter

105

J'ai des e-mails automatiques qui sont envoyés une fois l'inscription terminée pour mon site.

Jusqu'à récemment, ils fonctionnaient bien. Maintenant, le nouveau système de Google réécrit les images et les stocke dans son cache (soi-disant)

Cependant, la nouvelle réécriture par Google de mes liens d'image les brise complètement, donnant une erreur 500 et une image de lien cassée.

Disons que mon URL d'image normale est:

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

Google réécrit ceci pour:

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

Cependant, il n'y a rien à cette URL.

E-mail affichant des erreurs d'image

Donc, soit il y a quelque chose qui ne va pas avec les liens créés par Google, soit les images ne sont tout simplement pas téléchargées sur le serveur googleusercontent, mais je n'ai aucune idée de comment résoudre le problème.

J'utilise PHP, la bibliothèque phpmailer et un serveur Ubuntu sur Amazon EC2, mais je ne suis pas sûr que cela soit lié au problème.

RonnyKnoxville
la source
avez-vous une fonction de sécurité dans votre serveur ou une logique servant l'image? est-il disponible uniquement pour un temps limité ou ce type de fonctionnalités?
Pixou
Il n'y a aucun type de fonction de sécurité ou de système de connexion pour afficher les images, elles sont dans un dossier public du système. Si vous visitez le lien d'origine, les images sont visibles. Le problème est que la réécriture de l'URL par Google ne télécharge pas l'image sur leurs serveurs ou ne dirige pas correctement l'utilisateur vers mon site.
RonnyKnoxville
1
Après examen des blogs et des articles, aucune solution de contournement réelle n'a été trouvée pour ce problème aléatoire (mars 2013). Je me trompe ?
kheraud
4
cela me rend absolument fou. google a cassé un e-mail. J'ai été actif dans plusieurs discussions connexes sur les forums Google et je ne peux obtenir aucune traction. cela a été cassé depuis début décembre 2013.
Nathan Beach
Cela est-il allé quelque part? Je m'arrache les cheveux. Les images sont accessibles au public, se chargent correctement lorsque vous y accédez directement, les types de contenu correspondent et le serveur proxy de Google n'obtient que 200 OK dans mes journaux. Je n'ai aucune idée de la raison pour laquelle les images n'apparaissent pas dans Gmail.
Matt Brunmeier

Réponses:

83

Je pense avoir résolu le problème de GoogleImageProxy.

C'est quelque chose lié au concept CACHING. Supposons que vous ayez récemment déployé votre code php sur votre serveur mais que vous avez oublié de télécharger des images. vous avez testé une fois avec votre logique de messagerie. votre système a généré un e-mail HTML. Lorsque cet e-mail atteindra le serveur Gmail, GoogleImageProxy essaiera de récupérer et de stocker les images de votre site sur son propre serveur proxy. lors de la récupération des images, GoogleImageProxy a trouvé 404 statuts contre vos images manquantes et 403 contre certaines images protégées. GoogleImagesProxy a stocké ces statuts dans son propre serveur proxy.

Maintenant essayé d'ouvrir votre e-mail, vous avez remarqué quelques états 404 par rapport à vos images. C'est quelque chose de compréhensible. Vous vous êtes immédiatement rendu compte que vous aviez oublié de télécharger certaines images, vous les avez donc téléchargées sur votre serveur. et vous avez également fixé certaines autorisations contre les images protégées.

Vous avez tous fini maintenant. Maintenant, vous essayez d'exécuter à nouveau votre script php-email. En conséquence, vous recevez un autre e-mail dans votre boîte de réception Gmail ou Hotmail. vous aviez résolu tous les problèmes avec vos images. Maintenant, les images doivent être affichées dans le contenu de votre e-mail. mais vous ne pouvez toujours pas voir les images.

Ah, vous avez peut-être oublié de vider le cache de votre navigateur. Videz le cache de votre navigateur et chargez à nouveau la page gmail ou hotmail. Mais le résultat sera toujours le même. Essayez d'appliquer des dizaines de correctifs / correctifs et essayez d'exécuter votre script php-email des milliers de fois. Mais le résultat sera toujours le même. Pas d'amélioration.

LE VRAI PROBLÈME

Que diable se passe-t-il? Laissez-moi vous l'expliquer. Accédez à votre journal d'accès et essayez de trouver des demandes de GoogleImageProxy. Vous serez surpris de voir qu'il n'y aura que 2 ou 3 demandes de GoogleImageProxy en fonction du nombre d'images différentes utilisées dans votre e-mail. GoogleImageProxy n'a jamais essayé de récupérer des images même après avoir résolu les problèmes avec vos images en téléchargeant les images manquantes et en définissant les autorisations pour les images protégées. Pourquoi? Effacer le cache de votre navigateur n'a aucun impact. GoogleImageProxy ne récupérera jamais les images fraîches, même pour votre nouvel e-mail, car les images sont maintenant mises en cache dans GoogleImageProxy avec leur dernier code d'état et ne sont pas mises en cache dans votre propre navigateur.

GoogleImageProxy a défini sa propre date d'expiration pour les images. Je pense un mois. alors maintenant, la nouvelle copie des images sera récupérée après la date d'expiration. Je veux dire après un mois. Vous ne pouvez pas forcer GoogleImageProxy à récupérer les images. Mais il est important pour vous d'afficher des images dans votre e-mail. Quelle peut être la solution?

LA SOLUTION

Voici le seul moyen de forcer GoogleImageProxy à récupérer vos images

  • Renommez vos images en quelque chose d'autre avec les extensions png, jpg ou gif uniquement.
  • N'utilisez aucun type de chaîne de requête dans votre URL d'image comme ?t=34343
  • votre image doit inclure png, jpg ou gif comme extension.
  • l'URL de votre image doit être mappée directement sur votre image.
  • Si vous devez utiliser une URL de proxy pour vos images protégées, votre réponse doit inclure l'en-tête approprié, tel que Content-Type: image/jpeg
  • L'extension de fichier et l'en-tête de type de contenu doivent correspondre
  • Le code d'état doit être 200 au lieu de 403, 500, etc.

NOTE IMPORTANTE

Essayez de répéter l'ensemble du processus pour chaque exécution de script php-email. car chaque fois que GoogleImageProxy mettra en cache vos images et vous devrez répéter le même processus pour chaque nouvel essai.

Espérons que cela résoudra le problème pour la plupart des gens.

Malik Ahmed Khan Awan
la source
9
tl; dr: vous utilisez probablement .svg, utilisez plutôt .png .jpg ou .gif
taylorstine
2
ouais, n'utilisez pas de svg;)
Alexandre Martini
1
Nous avions une image servie à partir d'Azure Blob Storage qui avait un espace dans le nom du fichier. L'image ne s'afficherait pas correctement dans Gmail. Lorsque nous avons supprimé l'espace dans le nom du fichier, le problème a été résolu.
Narthring
1
@AlexandreMartini pourquoi ne pas utiliser SVG? Le logo est le meilleur en SVG, non?
trainoasis
1
Assurez-vous que vous encodez url les chemins de vos images. Nous avions un espace dans le chemin, et bien que les navigateurs le remplacent par un% 20, le cache gmail n'en a pas et le considère comme un lien rompu.
Chad Richardson
29

D'après votre exemple, il semble que vous utilisiez des extensions traditionnelles (.jpg, .png, .gif). Certaines personnes sur ce fil , décrivant les mêmes problèmes que vous rencontrez, ont déclaré que l'utilisation de ces extensions résout le problème.

Autres solutions possibles:

JSuar
la source
1
Ce sont beaucoup de sources que j'ai trouvées en recherchant moi-même ce problème, malheureusement aucune d'elles ne me donne la réponse que je recherche. J'espère toujours que Google résoudra ce problème avant que je n'arrive à trouver une réponse
RonnyKnoxville
@JackalopeZero avez-vous essayé de reproduire indépendamment ce problème en dehors de la newsletter? Je l'ai essayé sur mon compte Gmail personnel et d'entreprise avec des résultats positifs. Je sais que c'est un problème, mais peut-être que créer un nouvel e-mail avec des images pourrait faire la lumière sur ce qui se passe.
JSuar
4
Merci pour le conseil sur les extensions. J'utilisais des .svgimages, et il est confirmé que celles-ci ne sont pas prises en charge par le proxy de Google.
Nick Merrill
1
J'ai rencontré cela moi-même aujourd'hui. Pour moi, le proxy de Google lançait une erreur 500 pour 1x1 transparent pixel.gif. En changeant cela en un transparent 1x1 pixel.pnget le proxy a servi comme prévu. Bizarre.
deefour
8

J'avais un problème similaire, mais il était dû à la longueur de l'URL. Google génère l'URL suivante lors de la mise en cache d'une image depuis Gmail:

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

Le hachage généré est basé sur l'URL de l'image, mais la taille varie en fonction des caractères utilisés. J'ai exécuté plusieurs tests avec des URL de tailles différentes et j'ai trouvé que l'image mise en cache ne se chargerait pas de manière cohérente (400 / demande invalide) si le hachage dépassait 2076 caractères (près de 2048 octets + méta? Pas sûr).

Encore une fois, l'URL de l'image peut générer un hachage qui dépasse ce nombre de caractères à ~ 1000 caractères spéciaux, ou plus de 1500 caractères simples. Si le hachage dépasse 2076 caractères, la demande échoue.

Je me rends compte que c'est un ancien message, mais j'espère que cela aidera d'autres développeurs à parcourir Google

Mahdi.Montgomery
la source
6

Je sais que c'est une vieille question mais la même chose m'est arrivée. Lorsque j'ai vérifié mes journaux d'accès, c'est ce que j'ai trouvé -

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

Vous pouvez voir que mon serveur bloquait GOOGLEIMAGEPROXY en lui donnant une réponse 403 Forbidden . J'ai décidé de vérifier mon .htaccess et bien sûr, je bloquais le terme PROXY . Après avoir supprimé le terme, les images apparaissent très bien maintenant sur Gmail. J'espère que cela pourra aider.

Manish Pradhan
la source
J'avais aussi un 403. J'ai compris que mod_security bloque le proxy Google ...
Peter
2
C'était exactement le problème que j'avais. Vous pouvez tester si vous rencontrez le même problème de configuration en utilisant 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
Dave Teare
3

Les emplacements d'image HTTPS font du cache. Plusieurs de nos environnements de production n'ont aucun problème avec le proxy gmail d'emplacements d'image à l'aide d'un uri HTTPS. Je pourrais voir gmail ignorer votre contenu si le certificat SSL n'est pas valide d'une manière ou d'une autre.

DDS
la source
Merci pour la mise à jour. Même si c'était il y a quelque temps maintenant, je n'ai jamais trouvé de solution à cette réponse
RonnyKnoxville
En fonction de mon expérience actuelle en essayant de créer des e-mails html avec des images incluses et avec des protocoles https, je confirme que cela dépend du certificat. En utilisant Let's encrypt sans organisation, l'image est bloquée dans Gmail. Tout en utilisant un certificat de marque avec l'organisation incluse, bien l'image apparaît. Donc, je suppose que c'est soit des certificats gratuits ou de marque, soit l'organisation qui y est déclarée.
Tritof
3

J'ai juste essayé, après avoir remplacé l'image (sans changer le nom de l'image)

  • Ouvrez l'email dans un nouveau navigateur, il montre une nouvelle image

  • Ctrl + f5 (force une actualisation du cache) dans le chrome (mon navigateur par défaut), montre également une nouvelle image

safin chacko
la source
1

Vérifiez que le type de contenu renvoyé pour le fichier image par votre serveur est correct.

Vous pouvez vérifier cela en utilisant Fiddler.

Softlion
la source
1

Dans mon cas, la taille du fichier était le problème, c'était 22 Mo (je sais, non?), Et après avoir réduit la taille, tout a commencé à fonctionner comme un charme.

Vérifiez la taille du fichier et s'il est trop gros, compressez-le.

vishes_shell
la source
Belle prise. Le message d'erreur de Gmail donne l'impression qu'il s'agissait d'une erreur de frappe ou d'une erreur d'autorisations, ce qui était très trompeur.
Luminaire du
1

Je sais que c'est une vieille question mais j'ai rencontré ce problème. Dans mon cas, les images sont stockées sur Google Cloud Storage. Ce qui est intéressant, c'est ce lien

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

renvoie 307 (redirection temporaire) et un en- Locationtête contenant quelque chose comme

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

On dirait que GoogleImageProxy ne traite pas correctement 307

askazakov
la source
C'est vrai, j'avais besoin de mettre en place un équilibreur de charge et un CDN avec mon backend comme compartiment, maintenant mes images fonctionnent correctement sur le stockage cloud
Wendel Nascimento
0

J'ai une solution parfaite à ce problème, qui a fonctionné pour moi si vous utilisez PHPMailer, il vous suffit d'ajouter une autre option dans PHPMailer pour attacher une image comme celle-ci

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

Ici, nous avons donné le chemin absolu de l'image et lui donner un nom appelé «logoimg» ou ce que vous voulez.

Vous pouvez maintenant ajouter ce logoimg n'importe où dans votre corps HTML comme ceci

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

C'est tout.

Arjun Choudhary
la source
0

J'ai eu ce problème lorsque j'envoyais des gifs. J'ai trouvé que la taille du fichier était importante pour le serveur proxy de Googles. Je suggère de rendre les fichiers aussi petits que possible et de voir si cela fonctionne. Vous pouvez utiliser votre compte Gmail et ajouter une photo à partir d'une URL à tester. Si le gif apparaît lorsque vous rédigez votre e-mail, il sera recevable.

bon codage.

AtLeastTheresToast
la source
0
  1. Cela fonctionne-t-il depuis Outook / hotmail? Il faudrait alors que nous puissions l'isoler en tant que problème Google. Dans votre cas, ce n'est pas le cas.
  2. La taille de l'image peut être un problème. Essayez de le réduire et voyez
  3. www.monsite.com, ce site peut être accessible depuis votre système. Mais est-il également accessible depuis le serveur Google?
  4. Essayez de changer l'extension ... c'est l'astuce: vous avez peut-être essayé plusieurs choses, mais cela irait toujours à partir du cache (ce qui invalide vos efforts) mais lorsque l'extension change, elle est à nouveau récupérée et tout le travail que vous avez effectué auparavant entre en jeu et si ça marche, vous pourriez penser que c'est «l'extension» qui a fait l'affaire !! (comme beaucoup de ceux qui parlent d'extensions)
Nuages ​​bleus
la source
0

Dans mon cas de rencontrer ce problème, le problème était que accidentellement le chemin d'accès à l'image dans le modèle de courrier électronique avait des barres obliques triples dans l'URL, par exemple https:///content.example.org/image.png. C'était difficile à repérer, et alors qu'il fonctionnait dans d'autres clients de messagerie qui pouvaient résoudre avec succès l'URL, le proxy d'image de Google n'a pas été en mesure de le gérer et a abouti à un 404 pour l'adresse d'image mandatée.

Adam Reis
la source
-1

Assurez-vous que Gmail demande votre image http, non https.

Disons que votre URL d'image normale est:

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

Alors changez pour:

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

J'ai le fort sentiment que le proxy de Google ne cache pas https.

Pedro Vagner
la source
Bon point, le site utilise définitivement https alors cela aurait pu être la cause
RonnyKnoxville
19
"J'ai le fort sentiment que le proxy de Google ne cache pas https." - votre sentiment est faux
Will
1
Cela a fonctionné! J'essayais de copier et coller une cellule de feuille de calcul Google contenant une image externe dans un e-mail, en utilisant http lorsque le protocole fonctionnait.
Graphique du
C'est faux, pourquoi Google ne pourrait-il pas mettre en cache l'image sur https?
southpaw93
Google n'a rien mentionné à propos d'un procès contre https, donc le sentiment fort est gaspillé
Blue Clouds
-7

Nous sommes le 6 mars et vous avez probablement déjà compris cela, mais j'ai pensé que je voudrais aider les autres. J'ai découvert que les JPG ne fonctionnent pas dans gmail. Le format PNG fonctionne très bien. Désolé, je ne peux pas expliquer pourquoi, mais parfois il vaut mieux ne pas demander pourquoi. Utilisez PNG!

MaryM
la source
Je ne peux pas croire que Google considère réellement cela comme une solution. Quoi qu'il en soit, je vais l'essayer car nos newsletters sont détruites pour nos utilisateurs de Gmail.
Nathan Beach
Ce n'est pas vrai, gmail prend en charge les jpegs
Will
Il prend en charge jpgs
manager
J'utilise png et j'ai le même problème.
Eduardo Nobre