web-dev-qa-db-fra.com

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

Certains courriels automatiques sont envoyés à la fin de l'inscription pour mon site.

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

Cependant, la nouvelle réécriture de mes liens d'image par Google les détruit complètement, ce qui donne une erreur de 500 et une image de lien brisé.

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.

Email showing image errors

Donc, soit il y a un problème 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 ne sais pas comment résoudre ce 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.

68
JackalopeZero

Je pense avoir compris le problème 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 ayez 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 email HTML. Lorsque cet e-mail va toucher 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 détecté quelques 404 états par rapport à vos images manquantes et 403 par rapport à certaines images protégées. GoogleImagesProxy a stocké ces statuts sur son propre serveur proxy. 

Maintenant que vous tentez d’ouvrir votre courrier électronique, vous avez relevé 404 statuts en regard de vos images. C'est quelque chose de compréhensible. Vous avez immédiatement compris que vous aviez oublié de télécharger des images, vous les avez donc téléchargées sur votre serveur. et vous avez également corrigé certaines autorisations par rapport aux images protégées. 

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

Ah, vous avez peut-être oublié de vider le cache de votre navigateur. Effacez 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 et essayez d'exécuter votre script php-email plusieurs 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? Laisse-moi t'expliquer. Accédez à votre journal d’accès et essayez de rechercher des demandes provenant de GoogleImageProxy. Vous serez surpris de voir qu'il n'y aura que 2 ou 3 trois demandes de GoogleImageProxy en fonction du nombre d'images différentes utilisées dans votre courrier électronique. GoogleImageProxy n'a jamais essayé de récupérer des images, même après avoir résolu les problèmes liés à vos images en téléchargeant les images manquantes et en définissant des 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 nouvelles images, même pour votre nouveau courrier électronique, car les images sont maintenant mises en cache dans GoogleImageProxy avec leur dernier code d'état et non dans votre propre navigateur. 

GoogleImageProxy a défini sa propre date d'expiration pour les images. Je pense un mois. 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 que vous affichiez des images dans votre courrier électronique. Quelle peut être la solution?

LA SOLUTION

Suivre 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 Seulement.
  • N'utilisez aucun type de chaîne de requête dans l'URL de votre image, telle que ?t=34343.
  • votre image doit inclure une extension png, jpg ou gif.
  • votre URL d'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 tout le processus pour chaque exécution du script php-email. car chaque fois que GoogleImageProxy mettra vos images en cache, vous devrez répéter le même processus à chaque nouvel essai.

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

51

D'après votre exemple, il semblerait que vous utilisiez des extensions traditionnelles (.jpg, .png, .gif). Certaines personnes sur ce sujet , 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:

25
JSuar

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

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

Le hachage généré est basé sur l'URL de l'image, mais sa taille varie en fonction des caractères utilisés. J'ai effectué plusieurs tests avec des URL de tailles différentes et j'ai constaté que l'image mise en cache ne pourrait pas être chargée de manière cohérente (400/Demande non valide) si la longueur de hash dépasse 2076 caractères (près de 2048 octets + méta? Vous n'êtes 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 à environ 1 000 caractères spéciaux, ou plus de 1 500 caractères simples. Si le hachage dépasse 2076 caractères, la demande échoue.

Je réalise que c'est un vieux post, mais j'espère que cela aidera d'autres développeurs à récurer Google

6
Mahdi.Montgomery

Je sais que c'est une vieille question mais la même chose m'est arrivée. Quand 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 leGOOGLEIMAGEPROXYen lui donnant un 403 Interdit réponse. J'ai décidé de vérifier mon fichier .htaccess et, bien sûr, je bloquais le termePROXY. Après avoir supprimé le terme, les images apparaissent très bien maintenant sur Gmail. J'espère que cela pourra aider.

5
Manish Pradhan

Je viens d'essayer, Après avoir remplacé l'image (sans changer le nom de l'image)

  • Ouvrir un email dans un nouveau navigateur, il montre une nouvelle image 

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

3
safin chacko

Les emplacements d'image HTTPS sont mis en cache. Plusieurs de nos environnements de production ne rencontrent aucun problème avec les adresses de messagerie gmail utilisant un uri HTTPS. Je pouvais voir que gmail ignorait votre contenu si le certificat SSL n'était pas valide.

2
DDS

Dans mon cas, la taille du fichier était le problème, elle était de 22 Mo (je sais, n'est-ce pas?), 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.

1
vishes_shell

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.

1
Softlion

Assurez-vous que Gmail demande votre image sur http et 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.

0
Pedro Vagner
0
Naved Khan

J'ai eu ce problème quand j'envoyais des gifs. J'ai constaté que la taille du fichier est importante pour le serveur proxy 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 lors de la composition de votre email, il sera recevable.

codage heureux.

0
AtLeastTheresToast

J'ai une solution parfaite à ce problème, ce 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 avons donné le nom "logoimg" ou ce que vous voulez.

Maintenant, vous pouvez 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. 

0
Arjun Choudhary