Le nouveau cache d'image de Gmail casse les liens d'image dans le bulletin
j'ai reçu des e-mails automatiques qui sont envoyés à la fin de l'inscription pour mon site.
Jusqu'à récemment, ils fonctionnaient très bien. Maintenant le nouveau système de Google réécrit les images et les stocke dans sa mémoire cache (prétendument)
cependant, la nouvelle réécriture par Google de mes liens d'image les brise complètement, donnant une erreur de 500 et une image de lien cassé.
disons que mon url d'image normale est:
http://www.mysite.com/images/pic1.jpg
Google réécrit ceci à:
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.
donc, soit il y a quelque chose qui ne va pas avec les liens qui sont 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 comment résoudre le problème.
Im using PHP, le phpmailer bibliothèque et un serveur Ubuntu sur Amazon EC2, mais je ne suis pas sûr que ce soit lié à la question.
11 réponses
je pense que j'ai trouvé le problème GoogleImageProxy.
c'est quelque chose lié au concept de cache. 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 courriel HTML. Lorsque cet e-mail va frapper le serveur gmail GoogleImageProxy va essayer de récupérer et de stocker les images à partir de votre site à son propre serveur proxy. lors de l'extraction les images, GoogleImageProxy a trouvé quelques 404 statuts contre vos images manquantes et 403 contre quelques images protégées. GoogleImagesProxy a stocké ces statuts dans son propre serveur mandataire.
maintenant essayé d'ouvrir votre e-mail, vous avez remarqué quelques 404 statuts contre vos images. C'est quelque chose de compréhensible. Vous avez immédiatement réalisé que vous aviez oublié de télécharger des images, donc vous les avez téléchargées sur votre serveur. et aussi vous avez fixé quelques permissions contre protégé image.
vous avez terminé. Maintenant, vous essayez de lancer votre script php-email une fois de plus. En conséquence, vous recevez un autre courriel 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 votre contenu d'email. 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 téléchargez la page gmail ou hotmail une fois de plus. Mais l' le résultat sera toujours le même. Essayez d'appliquer des dizaines de correctifs et essayez d'exécuter votre php-script email des milliers de fois. Mais le résultat sera toujours le même. Pas d'amélioration.
THE REAL PROBLEM
que se passe-t-il? Permettez-moi de vous expliquer cela. Allez dans votre journal d'accès et essayez de trouver les requêtes de GoogleImageProxy. Vous serez surpris de voir qu'il n'y aura que deux ou trois requêtes de GoogleImageProxy en fonction du nombre d'images utilisées dans votre e-mail. GoogleImageProxy n'a jamais essayé de récupérer des images même après que vous ayez réglé les problèmes avec vos images en téléchargeant les images manquantes et en définissant les permissions pour les images protégées. Pourquoi? Le nettoyage de la mémoire cache de votre navigateur n'a aucun impact. GoogleImageProxy ne récupérera jamais les nouvelles images, même pour votre nouveau courriel, car les images sont maintenant mises en cache dans GoogleImageProxy avec leur dernier code d'état et non dans votre propre navigateur.
GoogleImageProxy a fixé sa propre date d'expiration pour les images. Je pense qu'un mois. donc maintenant la copie récente des images sera récupérée après la date d'expiration. Je veux dire au bout d'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 courriel. Quelle peut être la solution?
THE SOLUTION
ci - dessous est le seul moyen de forcer GoogleImageProxy pour aller chercher votre images
- renommez vos images en png, jpg ou GIF extensions seulement.
- 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.
- votre url d'image doit être mappée directement sur votre image.
- si vous avez besoin d'utiliser une url proxy pour vos images protégées alors votre la réponse doit inclure l'en-tête approprié comme
Content-Type: image/jpeg
- extension de fichier et en-tête de type contenu doivent correspondre
- Status-code doit être de 200 au lieu de 403, 500, etc
NOTE IMPORTANTE
Essayez de répéter l'ensemble du processus pour chaque exécution de php-script email. parce que chaque fois GoogleImageProxy cache vos images et vous devez répéter le même processus pour chaque nouvel essai.
espérons que cela réglera le problème pour la plupart des gens.
Basé sur votre exemple, il semble que vous utilisez traditionnel extensions (.jpg,.png,.GIF.) certains 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:
- liens d'Image brisés dans Gmail en raison de l'image proxy de google
- douteux, mais peut-être un problème de cookies
- image URL proxy whitelist setting - cela s'est avéré être la solution pour quelques utilisateurs qui sont sous Googleapps. Via Gmail ne montre pas l'image lorsque l'url de l'image est ajouté avec https://ci4.googleusercontent.com/proxy
j'avais un problème similaire, mais il a été 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 la taille varie en fonction des caractères utilisés. J'ai effectué plusieurs tests avec des URLs de tailles différentes, et j'ai trouvé que l'image mise en cache ne se chargerait pas de manière cohérente (requête 400 / non valide) si le hachage dépasse 2076 caractères dans longueur (près de 2048 octets + meta? pas sûr).
encore une fois, L'URL de l'image pourrait générer un hachage qui dépasse ce nombre de caractères à ~1000 caractères spéciaux, ou 1500+ caractères simples. Si le hachage dépasse 2076 caractères, la demande échoue.
je me rends compte que c'est un vieux post, mais avec un peu de chance, cela aide D'autres dévs à récurer Google
je sais que c'est une vieille question, mais la même chose m'est arrivé. 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 le GOOGLEIMAGEPROXY lui donnant une réponse 403 Interdit . J'ai décidé de consulter mon .htaccess et bien sûr, j'ai été le blocage de l'expression PROXY . Après avoir supprimé le terme, les images apparaissent très bien maintenant sur Gmail. Espérer qui permet de.
HTTPS image, l'emplacement du cache. Plusieurs de nos environnements de production n'ont aucun problème avec les emplacements d'image proxy gmail en utilisant un uri HTTPS. Je pourrais voir gmail ignorer votre contenu si le certificat SSL est invalide d'une manière ou d'une autre.
je viens d'essayer , après avoir remplacé l'image (sans changer le nom de l'image)
-
ouvrir e-mail dans le nouveau navigateur , il affiche la nouvelle image
-
Ctrl+f5 (forces d'actualisation du cache) dans le chrome (mon navigateur par défaut) , affiche également la nouvelle image
vérifiez que le type de contenu retourné pour le fichier image par votre serveur est correct.
vous pouvez vérifier cela en utilisant Fiddler.
dans mon cas la taille du fichier était le problème, il était de 22 Mo (je sais droit?), et après nous avons réduit la taille tout a commencé à fonctionner comme un charme.
Vérifiez la taille du fichier et si c'est trop gros, compressez-le.
assurez-vous que Gmail demande votre image sur http
, pas https
.
disons que l'url de votre image normale est:
https://www.mysite.com/images/pic1.jpg
changer à:
http://www.mysite.com/images/pic1.jpg
j'ai le sentiment fort que le proxy de google ne cache pas https
.
j'ai une solution parfaite de ce problème, qui a fonctionné pour moi si vous utilisez PHPMailer alors vous avez juste à ajouter une autre option dans PHPMailer pour attacher l'image comme ceci
$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.
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.
c'est le 6 mars et tu as probablement déjà compris ça, mais j'ai pensé que je pourrais intervenir pour aider les autres. J'ai découvert que les jpg ne travaillent pas à 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 le format PNG!