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

105

Tengo algunos correos electrónicos automáticos que se envían una vez finalizado 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 los enlaces de mi imagen los está rompiendo por completo, dando un error 500 y una imagen de enlace rota.

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.

Correo electrónico que muestra errores de imagen

Entonces, o hay algún problema con los enlaces que está creando Google o las imágenes simplemente no se están cargando en el servidor de contenido de usuario 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.

RonnyKnoxville
fuente
¿Tiene alguna característica de seguridad en su servidor o lógica que sirve la imagen? ¿Está disponible solo por tiempo limitado o este tipo de funciones?
Pixou
No hay ningún tipo de función de seguridad o sistema de inicio de sesión para ver las imágenes, están en una carpeta pública en el sistema. Si visita el enlace original, las imágenes se pueden ver. El problema es que la reescritura de la URL por parte de Google no carga la imagen en sus servidores o no dirige correctamente al usuario a mi sitio.
RonnyKnoxville
1
Después de la revisión de blogs y publicaciones, no se ha encontrado una solución alternativa real para este problema aleatorio (marzo de 2013). Estoy equivocado ?
kheraud
4
esto me está volviendo absolutamente loco. google ha roto el correo electrónico. He estado activo en varios hilos relacionados en los foros de Google y no puedo obtener tracción. esto se ha roto desde principios de diciembre de 2013.
Nathan Beach
¿Ha ido esto a alguna parte? Me estoy arrancando el pelo. Las imágenes son de acceso público, se cargan bien cuando van directamente a ellas, el tipo de contenido coincide y el servidor proxy de Google no obtiene más que 200 OK en mis registros. No tengo idea de por qué las imágenes no se muestran en Gmail.
Matt Brunmeier

Respuestas:

83

Creo que he descubierto 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 imágenes. 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. Mientras buscaba las imágenes, GoogleImageProxy encontró algunos estados 404 contra las imágenes que faltaban y 403 contra algunas imágenes protegidas. GoogleImagesProxy ha almacenado estos estados en su propio servidor proxy.

Ahora trató de abrir su correo electrónico, notó algunos estados 404 en sus imágenes. Esto es algo comprensible. Inmediatamente se dio cuenta de que olvidó cargar algunas imágenes, por lo que las subió a su servidor. y también ha arreglado algunos permisos contra imágenes protegidas.

Todo ha terminado ahora. Ahora intente ejecutar su script php-email una vez más. Como resultado, recibe otro correo electrónico en su bandeja de entrada de Gmail o Hotmail. había solucionado todos los problemas con sus imágenes. Ahora las imágenes deben mostrarse en el contenido de su correo electrónico. pero aún no puede ver las imágenes.

Ah, posiblemente olvidó borrar la memoria caché de su 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 explicarte. Vaya a su registro de acceso e intente encontrar solicitudes de GoogleImageProxy. Te sorprenderá ver que solo habrá 2 o 3 tres solicitudes de GoogleImageProxy dependiendo de la cantidad de imágenes diferentes utilizadas en tu correo electrónico. GoogleImageProxy nunca intentó recuperar imágenes Incluso después de haber solucionado los problemas con sus imágenes cargando las imágenes faltantes y estableciendo permisos para las imágenes protegidas. ¿Por qué? Limpiar la memoria caché de su navegador no tiene ningún impacto. GoogleImageProxy nunca buscará las imágenes nuevas, incluso para su correo electrónico más reciente, porque las imágenes ahora se almacenan en caché en GoogleImageProxy junto con su último código de estado y no en el de su propio navegador.

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

LA SOLUCIÓN

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

  • Cambie el nombre de sus imágenes a otra cosa con extensiones png, jpg o gif únicamente.
  • No use ningún tipo de cadena de consulta en la URL de su imagen como ?t=34343
  • su imagen debe incluir png, jpg o gif como extensión.
  • la URL de su imagen debe asignarse 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 del archivo y el encabezado del 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é sus imágenes y tendrá que repetir el mismo proceso para cada nuevo intento.

Con suerte, esto solucionará el problema para la mayoría de las personas.

Malik Ahmed Khan Awan
fuente
9
tl; dr: probablemente estés usando .svg, usa .png .jpg o .gif en su lugar
taylorstine
2
sí, no uses svg;)
Alexandre Martini
1
Teníamos una imagen servida desde Azure Blob Storage que tenía un espacio en el nombre del archivo. La imagen no se mostraría correctamente en Gmail. Cuando eliminamos el espacio en el nombre del archivo, solucionó el problema.
Narthring
1
@AlexandreMartini ¿por qué no usar SVG? El logotipo es mejor en SVG, ¿no?
trainoasis
1
Asegúrese de codificar con urlen las rutas de las imágenes. Teníamos un espacio en la ruta, y aunque los navegadores lo reemplazarán con un% 20, la caché de gmail no lo tiene y lo considera un enlace roto.
Chad Richardson
29

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

Otras posibles soluciones:

JSuar
fuente
1
Estas son muchas de las fuentes que encontré al investigar este problema, desafortunadamente ninguna de ellas me da la respuesta que estoy buscando. Sigo esperando que Google resuelva este problema antes de que pueda encontrar una respuesta
RonnyKnoxville
@JackalopeZero, ¿ha intentado replicar de forma independiente este problema fuera del boletín? Lo probé en mi gmail personal y de la empresa con resultados exitosos. Sé que es un problema, pero tal vez crear un nuevo correo electrónico con imágenes podría arrojar luz sobre lo que está ocurriendo.
JSuar
4
Gracias por el consejo sobre extensiones. Estaba usando .svgimágenes, y se confirma que el proxy de Google no las admite.
Nick Merrill
1
Me encontré con esto yo mismo hoy. Para mí, el proxy de Google arrojaba un error 500 para 1x1 transparente pixel.gif. Cambiando esto a 1x1 transparente pixel.pngy el proxy sirvió como se esperaba. Extraño.
deefour
8

Tuve un problema similar, pero fue causado por la longitud de la URL. Google genera la siguiente URL al almacenar 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. Ejecuté varias pruebas con URL de diferentes tamaños y descubrí que la imagen en caché no se cargaría de manera consistente (400 / Solicitud no válida) si el hash excede los 2076 caracteres de longitud (cerca de 2048 bytes + meta? No estoy seguro).

Nuevamente, la URL de la imagen podría generar un hash que exceda esta cantidad de caracteres en ~ 1000 caracteres especiales, o 1500+ caracteres simples. Si el hash supera los 2076 caracteres, la solicitud falla.

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

Mahdi.Montgomery
fuente
6

Sé que es una vieja pregunta, pero a mí 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)" 

Puede ver que mi servidor estaba bloqueando GOOGLEIMAGEPROXY y le dio una respuesta 403 Prohibida . Decidí verificar mi .htaccess y, efectivamente, estaba bloqueando el término PROXY . Después de eliminar el término, las imágenes ahora aparecen bien en Gmail. Espero que ayude.

Manish Pradhan
fuente
También tenía un 403. Descubrí que mod_security está bloqueando el proxy de Google ...
Peter
2
Este fue exactamente el problema que tuve. Puede probar si tiene el mismo problema de configuración usando 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

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 imágenes de proxy de Gmail mediante un URL HTTPS. Podría ver que gmail ignora su contenido si el certificado SSL no es válido de alguna manera.

DDS
fuente
Gracias por la actualización. Aunque fue hace un tiempo, nunca encontré una solución a esta respuesta
RonnyKnoxville
Dependiendo de mi experiencia actual tratando de crear correos electrónicos html con imágenes incluidas y con protocolos https, confirmo que depende del certificado. Usando vamos a cifrar sin organización en él, la imagen se bloquea en Gmail. Mientras usa un certificado de marca con la organización incluida, aparece la imagen. Así que supongo que son certificados gratuitos o de marca o la organización declarada en ellos.
Tritof
3

Lo intenté, después de reemplazar la imagen (sin cambiar el nombre de la imagen)

  • Abra el correo electrónico en un nuevo navegador, muestra una nueva imagen

  • Ctrl + F5 (fuerza una actualización de caché) en Chrome (mi navegador predeterminado), también muestra una nueva imagen

safin chacko
fuente
1

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

Puede verificar esto usando Fiddler.

Softlion
fuente
1

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

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

vishes_shell
fuente
Buena atrapada. El mensaje de error de Gmail hace que parezca que se trata de un error de escritura o de permisos, lo cual es muy engañoso.
Luminaria
1

Sé que esta es una pregunta antigua, pero encontré este problema. En mi caso, las imágenes se almacenan en Google Cloud Storage. Lo interesante es ese enlace

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

devuelve 307 (redireccionamiento temporal) y un Locationencabezado que contiene algo como

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

Parece que GoogleImageProxy no procesa 307 correctamente

Askazakov
fuente
Esto es cierto, necesitaba configurar un balanceador de carga y CDN con mi backend como un depósito, ahora mis imágenes funcionan correctamente en el almacenamiento en la nube
Wendel Nascimento
0

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 la ruta absoluta de la imagen y le hemos dado un nombre llamado 'logoimg' o lo que quieras.

Ahora puede agregar este logoimg en cualquier lugar de su 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.

Arjun Choudhary
fuente
0

Tuve este problema cuando estaba enviando gifs. Descubrí que el tamaño del archivo es importante para el servidor Proxy de Google. Sugiero hacer los archivos lo más pequeños posible y ver si funciona. Puede usar su cuenta de Gmail y agregar una foto de una URL para probar. Si el gif aparece cuando está redactando su correo electrónico, se podrá recibir.

codificación feliz.

Al menos hay brindis
fuente
0
  1. ¿Funciona desde Outook / hotmail? Entonces deberíamos aislarlo como problema de Google. En tu caso no lo es.
  2. El tamaño de la imagen puede ser un problema. Intenta reducirlo y mira
  3. www.mysite.com este sitio puede ser accesible desde su sistema. ¿Pero también es accesible desde el servidor de Google?
  4. Intente cambiar la extensión ... este es el truco: es posible que haya intentado varias cosas, pero aún se obtendría de la caché (lo que invalida sus esfuerzos) pero cuando la extensión cambia, se recupera nuevamente y todo el trabajo que hizo antes entra en juego y si Funciona, ¡podría pensar que es la 'extensión' la que hizo el truco! (como muchos de los que hablan de extensiones)
Nubes azules
fuente
0

En mi caso de encontrarme con este problema, el problema fue que, accidentalmente, la ruta a la imagen en la plantilla de correo electrónico tenía barras triples en la URL, por ejemplo https:///content.example.org/image.png. Esto fue difícil de detectar, y mientras funcionaba en otros clientes de correo electrónico que podían resolver con éxito la URL, el proxy de imagen de Google no pudo manejarlo y resultó en un 404 para la dirección de imagen proxy.

Adam Reis
fuente
-1

Asegúrese de que Gmail solicite su imagen http, no 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.

Pedro Vagner
fuente
Buen punto, el sitio definitivamente está usando https, por lo que esa podría haber sido la causa
RonnyKnoxville
19
"Tengo la fuerte sensación de que el proxy de Google no almacena https en caché". - tu sensación es incorrecta
Will
1
¡Esto funcionó! Estaba tratando de copiar y pegar una celda de hoja de cálculo de Google que contenía una imagen externa en un correo electrónico, usando http como funcionaba el protocolo.
Gráfico
Esto está mal, ¿por qué Google no podría almacenar en caché la imagen en https?
southpaw93
Google no ha mencionado nada sobre una demanda contra https, por lo que el sentimiento fuerte se desperdicia
Blue Clouds
-7

Es 6 de marzo y probablemente ya lo hayas descubierto, pero pensé en intervenir para ayudar a otros. Descubrí que los archivos JPG no funcionan en gmail. El formato PNG funciona muy bien. Lo siento, no puedo explicar por qué, pero a veces es mejor no preguntar por qué. ¡Utilice PNG!

MaryM
fuente
No puedo creer que Google realmente considere eso una solución. Independientemente, voy a intentarlo porque nuestros boletines están destrozados para nuestros usuarios de Gmail.
Nathan Beach
Esto no es cierto, gmail admite jpegs
Will
Es compatible con jpgs
managerger
L uso png y obtengo el mismo problema.
Eduardo Nobre