it-swarm-es.com

El nuevo almacenamiento en caché de imágenes de Gmail está rompiendo los enlaces de imagen en el boletín

Tengo algunos correos electrónicos automáticos que se envían al finalizar el registro en mi sitio.

Hasta hace poco, funcionaban bien. Ahora el nuevo sistema de Google está reescribiendo las imágenes y almacenándolas en su caché (supuestamente)

Sin embargo, la nueva reescritura de Google de mis enlaces de imagen los está rompiendo completamente, dando un error 500 y una imagen de enlace roto.

Digamos que mi url de imagen normal es:

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

Google está reescribiendo esto para:

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

Sin embargo, no hay nada en esa URL.

Email showing image errors

Por lo tanto, o bien hay algo mal con los enlaces que está creando Google o las imágenes simplemente no se están cargando en el servidor de contenido de Google, pero no tengo idea de cómo resolver el problema.

Estoy usando PHP, la biblioteca phpmailer y un servidor Ubuntu en Amazon EC2, pero no estoy seguro de que esté relacionado con el problema.

74
JackalopeZero

Creo que he resuelto el problema de GoogleImageProxy.

Esto es algo relacionado con el concepto CACHING. Supongamos que recientemente ha implementado su código php en su servidor pero olvidó cargar las imágenes. Usted probó una vez con su lógica de correo electrónico. Su sistema generó un correo electrónico HTML. Cuando este correo electrónico llegue al servidor de gmail, GoogleImageProxy intentará recuperar y almacenar las imágenes de su sitio en su propio servidor proxy. Al recuperar las imágenes, GoogleImageProxy encontró algunos estados 404 en contra de las imágenes que faltan y 403 en algunas imágenes protegidas. GoogleImagesProxy ha almacenado estos estados en su propio servidor proxy.

Ahora que intentaste abrir tu correo electrónico, notaste algunos estados 404 en tus imágenes. Esto es algo comprensible. Inmediatamente se dio cuenta de que olvidó cargar algunas imágenes, por lo que las cargó en su servidor. y también has arreglado algunos permisos contra imágenes protegidas.

Ya has terminado. Ahora intentas ejecutar tu script php-email una vez más. Como resultado, recibe otro correo electrónico en su bandeja de entrada de Gmail o Hotmail. Habías arreglado todos los problemas con tus imágenes. Ahora las imágenes deben mostrarse en el contenido de su correo electrónico. pero todavía no puedes ver las imágenes.

Ah, posiblemente te olvidaste de borrar el caché de tu navegador. Borre la memoria caché de su navegador y cargue la página de gmail o hotmail una vez más. Pero el resultado seguirá siendo el mismo. Intente aplicar docenas de correcciones/parches e intente ejecutar su script php-email miles de veces. Pero el resultado seguirá siendo el mismo. Sin mejora.

EL PROBLEMA REAL

¿Qué diablos está pasando? Déjame explicártelo. Vaya a su registro de acceso e intente encontrar solicitudes de GoogleImageProxy. Se sorprenderá al ver que solo habrá 2 o 3 tres solicitudes de GoogleImageProxy, dependiendo de la cantidad de imágenes diferentes utilizadas en su correo electrónico. GoogleImageProxy nunca intentó recuperar imágenes, incluso después de haber solucionado los problemas con sus imágenes al cargar imágenes faltantes y configurar permisos para imágenes protegidas. ¿Por qué? Borrar la memoria caché de su navegador no tiene ningún impacto. GoogleImageProxy nunca recuperará las imágenes nuevas incluso para su correo electrónico más nuevo porque las imágenes ahora se almacenan en caché en GoogleImageProxy junto con su último código de estado y no se almacenan en caché en su propio navegador.

GoogleImageProxy ha establecido su propia fecha de caducidad para las imágenes. Creo que un mes. ahora la copia nueva de las imágenes se recuperará después de la fecha de caducidad. Quiero decir después de un mes. No puedes obligar a GoogleImageProxy a buscar las imágenes. Pero es importante que muestres imágenes en tu correo electrónico. Cual puede ser la solución?

LA SOLUCIÓN

La siguiente es la única forma de obligar a GoogleImageProxy a recuperar sus imágenes

  • Cambie el nombre de sus imágenes a otra cosa solo con las extensiones png, jpg o gif.
  • No use ningún tipo de cadena de consulta en su url de imagen como ?t=34343
  • tu imagen debe incluir png, jpg o gif como una extensión.
  • la url de su imagen debe ser asignada directamente a su imagen.
  • Si necesita usar alguna URL de proxy para sus imágenes protegidas, su respuesta debe incluir el encabezado adecuado como Content-Type: image/jpeg
  • La extensión de archivo y el encabezado de tipo de contenido deben coincidir
  • El código de estado debe ser 200 en lugar de 403, 500, etc.

NOTA IMPORTANTE

Intente repetir todo el proceso para cada ejecución del script php-email. porque cada vez que GoogleImageProxy almacenará en caché tus imágenes y tendrás que repetir el mismo proceso para cada nuevo intento.

Esperemos que esto solucione el problema para la mayoría de la gente.

61

Según su ejemplo, parece que está usando extensiones tradicionales (.jpg, .png, .gif). Algunas personas en este hilo , describiendo los mismos problemas que enfrenta, han declarado que el uso de esas extensiones resuelve el problema.

Otras posibles soluciones:

25
JSuar

Tenía un problema similar, pero fue causado por la longitud de la URL. Google genera la siguiente URL cuando almacena en caché una imagen de gmail:

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

El hash generado se basa en la URL de la imagen, pero el tamaño variará según los caracteres utilizados. Corrí varias pruebas con URL de diferentes tamaños y encontré que la imagen almacenada en la caché no se cargaría de manera consistente (400/Solicitud no válida) si el hash supera los 2076 caracteres de longitud (cerca de 2048 bytes + meta? No estoy seguro) .

Una vez más, la URL de la imagen podría generar un hash que supera este número de caracteres en ~ 1000 caracteres especiales, o más de 1500 caracteres simples. Si el hash supera los 2076 caracteres de longitud, la solicitud falla.

Me doy cuenta de que esta es una publicación antigua, pero espero que esto ayude a otros desarrolladores que buscan en Google

7
Mahdi.Montgomery

Sé que esta es una vieja pregunta pero me pasó lo mismo. Cuando revisé mis registros de acceso, esto es lo que encontré -

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

Puedes ver que mi servidor estaba bloqueando elGOOGLEIMAGEPROXYdándole un 403 Forbidden reply. Decidí verificar mi .htaccess y, por supuesto, estaba bloqueando el términoPROXY. Después de eliminar el término, las imágenes aparecen bien ahora en Gmail. Espero que ayude.

5
Manish Pradhan

Las ubicaciones de las imágenes HTTPS se almacenan en caché. Varios de nuestros entornos de producción no tienen problemas con las ubicaciones de imagen de proxy de gmail utilizando un uri HTTPS. Podría ver que Gmail ignora su contenido si el certificado SSL no es válido de alguna manera.

3
DDS

Acabo de intentarlo, después de reemplazar la imagen (sin cambiar el nombre de la imagen)

  • Abrir correo electrónico en nuevo navegador, muestra nueva imagen.

  • Ctrl + f5 (fuerza una actualización de caché) en el chrome (mi navegador predeterminado), también muestra la nueva imagen

3
safin chacko

En mi caso, el tamaño del archivo era el problema, era de 22 Mb (lo sé, ¿no?), Y después de que redujimos el tamaño, todo comenzó a funcionar a la perfección.

Compruebe el tamaño del archivo y si es demasiado grande, comprímalo.

1
vishes_shell

Compruebe que el tipo de contenido devuelto para el archivo de imagen por su servidor sea correcto.

Puedes comprobarlo utilizando Fiddler.

1
Softlion

Asegúrese de que Gmail solicite su imagen a través de http, no de https.

Digamos que su url de imagen normal es:

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

Así que cambia a

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

Tengo la fuerte sensación de que el proxy de google no almacena en caché https.

0
Pedro Vagner
0
Naved Khan

Tengo una solución perfecta para este problema, que funcionó para mí si está usando PHPMailer, entonces solo tiene que agregar otra opción en PHPMailer para adjuntar una imagen como esta.

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

Aquí le hemos dado el camino absoluto de la imagen y le damos un nombre llamado 'logoimg' o lo que quiera.

Ahora puedes agregar este logoimg a cualquier lugar de tu cuerpo HTML como este

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

Eso es todo.

0
Arjun Choudhary