La nuova memorizzazione nella cache delle immagini di Gmail sta interrompendo i collegamenti alle immagini nella newsletter


105

Ho alcune email automatiche che vengono inviate al completamento della registrazione per il mio sito.

Fino a poco tempo, funzionavano bene. Ora il nuovo sistema di Google sta riscrivendo le immagini e le memorizza nella sua cache (presumibilmente)

Tuttavia, la nuova riscrittura di Google dei miei collegamenti immagine li sta completamente interrompendo, dando un errore 500 e un'immagine di collegamento interrotto.

Diciamo che il mio URL di immagine normale è:

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

Google lo sta riscrivendo per:

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

Tuttavia, non c'è niente in quell'URL.

Email che mostra errori di immagine

Quindi, o c'è qualcosa di sbagliato nei collegamenti che vengono creati da Google o le immagini non vengono semplicemente caricate sul server googleuser dei contenuti, ma non ho idea di come risolvere il problema.

Sto usando PHP, la libreria phpmailer e un server Ubuntu su Amazon EC2, ma non sono sicuro che sia correlato al problema.


hai qualche funzione di sicurezza nel tuo server o logica che serve l'immagine? è disponibile solo per un tempo limitato o questo tipo di funzionalità?
Pixou

Non esiste alcun tipo di funzionalità di sicurezza o sistema di accesso per visualizzare le immagini, si trovano in una cartella pubblica nel sistema. Se visiti il ​​link originale le immagini sono visualizzabili. Il problema è che la riscrittura dell'URL da parte di Google non sta caricando l'immagine sui loro server o non indirizza correttamente l'utente al mio sito.
RonnyKnoxville

1
Dopo la revisione di blog e post, non è stata trovata alcuna soluzione alternativa reale per questo problema casuale (marzo 2013). Ho sbagliato ?
kheraud

4
questo mi sta facendo impazzire. Google ha rotto l'email. Sono stato attivo in diversi thread correlati sui forum di Google e non riesco a ottenere alcuna trazione. questo è stato interrotto dall'inizio di dicembre 2013.
Nathan Beach

È andato da qualche parte? Mi sto strappando i capelli. Le immagini sono accessibili pubblicamente, si caricano bene quando ci si accede direttamente, il tipo di contenuto corrisponde e il server proxy di Google non riceve altro che 200 OK nei miei log. Non ho idea del motivo per cui le immagini non verranno visualizzate in Gmail.
Matt Brunmeier

Risposte:


83

Penso di aver capito il problema di GoogleImageProxy.

Questo è qualcosa legato al concetto di CACHING. supponi di aver recentemente distribuito il tuo codice php sul tuo server ma ti sei dimenticato di caricare le immagini. hai provato una volta con la tua logica di posta elettronica. il tuo sistema ha generato un'e-mail HTML. Quando questa email arriverà al server gmail, GoogleImageProxy proverà a recuperare e memorizzare le immagini dal tuo sito al proprio server proxy. durante il recupero delle immagini, GoogleImageProxy ha rilevato alcuni stati 404 rispetto alle immagini mancanti e 403 rispetto ad alcune immagini protette. GoogleImagesProxy ha memorizzato questi stati nel proprio server proxy.

Ora ho provato ad aprire la tua email, hai notato alcuni stati 404 rispetto alle tue immagini. È qualcosa di comprensibile. Ti sei subito reso conto di aver dimenticato di caricare alcune immagini, quindi le hai caricate sul tuo server. e inoltre hai corretto alcuni permessi contro le immagini protette.

Ora hai finito. Ora provi di nuovo a eseguire il tuo script php-email. Di conseguenza, ricevi un'altra email nella tua casella di posta Gmail o Hotmail. avevi risolto tutti i problemi con le tue immagini. Ora le immagini devono essere visualizzate nel contenuto della tua email. ma non sei ancora in grado di vedere le immagini.

Ah, forse ti sei dimenticato di svuotare la cache del browser. Svuota la cache del browser e carica di nuovo la pagina Gmail o Hotmail. Ma il risultato sarà sempre lo stesso. Prova ad applicare dozzine di correzioni / patch e prova a eseguire migliaia di volte il tuo script php-email. Ma il risultato sarà sempre lo stesso. Nessun miglioramento.

IL VERO PROBLEMA

Che diavolo sta succedendo? Lascia che te lo spieghi. Vai al tuo registro di accesso e prova a trovare le richieste da GoogleImageProxy. Sarai sorpreso di vedere che ci saranno solo 2 o 3 tre richieste da GoogleImageProxy a seconda del numero di immagini diverse utilizzate nella tua email. GoogleImageProxy non ha mai provato a recuperare le immagini Anche dopo aver risolto i problemi con le immagini caricando le immagini mancanti e impostando le autorizzazioni per le immagini protette. Perché? La cancellazione della cache del browser non ha alcun impatto. GoogleImageProxy non recupererà mai le nuove immagini nemmeno per le tue email più recenti perché le immagini sono ora memorizzate nella cache di GoogleImageProxy insieme al loro ultimo codice di stato e non memorizzate nella cache del tuo browser.

GoogleImageProxy ha impostato una propria data di scadenza per le immagini. Penso un mese. quindi ora la nuova copia delle immagini verrà recuperata dopo la data di scadenza. Voglio dire dopo un mese. Non puoi forzare GoogleImageProxy a recuperare le immagini. Ma è importante per te visualizzare le immagini nella tua email. Quale può essere la soluzione?

LA SOLUZIONE

Quello che segue è l'unico modo per forzare GoogleImageProxy a recuperare le tue immagini

  • Rinomina le tue immagini in qualcos'altro con solo estensioni png, jpg o gif.
  • Non utilizzare alcun tipo di stringa di query nell'URL dell'immagine come ?t=34343
  • la tua immagine deve includere png, jpg o gif come estensione.
  • l'URL dell'immagine deve essere mappato direttamente sulla tua immagine.
  • Se è necessario utilizzare un URL proxy per le immagini protette, la risposta deve includere l'intestazione corretta come Content-Type: image/jpeg
  • L'estensione del file e l'intestazione del tipo di contenuto devono corrispondere
  • Il codice di stato deve essere 200 invece di 403, 500 ecc

NOTA IMPORTANTE

Prova a ripetere l'intero processo per ogni esecuzione dello script php-email. perché ogni volta che GoogleImageProxy memorizzerà le tue immagini nella cache e dovrai ripetere la stessa procedura per ogni nuovo tentativo.

Si spera che questo risolva il problema per la maggior parte delle persone.


9
tl; dr: probabilmente stai usando .svg, usa .png .jpg o .gif invece
taylorstine

2
sì, non usare svg;)
Alexandre Martini

1
Avevamo un'immagine servita da Archiviazione BLOB di Azure con uno spazio nel nome del file. L'immagine non viene visualizzata correttamente in Gmail. Quando abbiamo rimosso lo spazio nel nome del file, il problema è stato risolto.
Narthring

1
@AlexandreMartini perché non usare SVG? Il logo è migliore in SVG, no?
trainoasis

1
Assicurati di aver codificato nell'URL i percorsi delle immagini. Avevamo uno spazio nel percorso e, sebbene i browser lo sostituiranno con un% 20, la cache di Gmail non lo fa e lo considera un collegamento interrotto.
Chad Richardson,

29

In base al tuo esempio, sembra che tu stia utilizzando le estensioni tradizionali (.jpg, .png, .gif). Alcune persone su questo thread , descrivendo gli stessi problemi che stai affrontando, hanno affermato che l'uso di queste estensioni risolve il problema.

Altre possibili soluzioni:


1
Queste sono molte delle fonti che ho trovato durante la ricerca di questo problema da solo, sfortunatamente nessuna di loro mi ha dato la risposta che sto cercando. Spero ancora che Google risolva questo problema prima di riuscire a trovare una risposta
RonnyKnoxville

@JackalopeZero hai provato a replicare in modo indipendente questo problema al di fuori della newsletter? L'ho provato sul mio gmail personale e aziendale con risultati di successo. So che è un problema, ma forse creare una nuova email con immagini potrebbe far luce su cosa sta succedendo.
JSuar

4
Grazie per il suggerimento sulle estensioni. Stavo usando .svgimmagini e quelle sono confermate per non essere supportate dal proxy di Google.
Nick Merrill

1
Oggi mi sono imbattuto in questo. Per me, il proxy di Google generava un errore 500 per 1x1 trasparente pixel.gif. Modificando questo in un trasparente 1x1 pixel.pnge il proxy servito come previsto. Strano.
deefour

8

Stavo riscontrando un problema simile, ma era causato dalla lunghezza dell'URL. Google genera il seguente URL quando memorizza nella cache un'immagine da Gmail:

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

L'hash generato si basa sull'URL dell'immagine, ma le dimensioni variano in base ai caratteri utilizzati. Ho eseguito diversi test con URL di dimensioni diverse e ho scoperto che l'immagine memorizzata nella cache non veniva caricata in modo coerente (400 / Richiesta non valida) se l' hash supera i 2076 caratteri di lunghezza (vicino a 2048 byte + meta? Non sono sicuro).

Ancora una volta, l'URL dell'immagine potrebbe generare un hash che supera questo numero di caratteri a ~ 1000 caratteri speciali o oltre 1500 caratteri semplici. Se l'hash supera i 2076 caratteri di lunghezza, la richiesta non riesce.

Mi rendo conto che questo è un vecchio post, ma spero che questo aiuti altri sviluppatori a setacciare Google


6

So che questa è una vecchia domanda, ma a me è successa la stessa cosa. Quando ho controllato i miei log di accesso, questo è quello che ho trovato -

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

Puoi vedere che il mio server stava bloccando GOOGLEIMAGEPROXY dandogli una risposta 403 Forbidden . Ho deciso di controllare il mio .htaccess e abbastanza sicuro stavo bloccando il termine PROXY . Dopo aver rimosso il termine, le immagini ora appaiono perfettamente su Gmail. Spero che aiuti.


Ho anche avuto un 403. Ho scoperto che mod_security sta bloccando il proxy di Google ...
Peter

2
Questo era esattamente il problema che avevo. Puoi verificare se stai riscontrando lo stesso problema di configurazione 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

Le posizioni delle immagini HTTPS vengono memorizzate nella cache. Molti dei nostri ambienti di produzione non hanno problemi con gmail che esegue il proxy delle posizioni delle immagini utilizzando un uri HTTPS. Ho potuto vedere Gmail ignorare i tuoi contenuti se il certificato SSL non è valido in qualche modo.


Grazie per l'aggiornamento. Anche se è passato un po 'di tempo non ho mai trovato una soluzione a questa risposta
RonnyKnoxville

A seconda della mia attuale esperienza nel tentativo di creare email html con immagini incluse e con protocolli https, confermo che dipende dal certificato. Usando la crittografia senza alcuna organizzazione al suo interno, l'immagine viene bloccata in Gmail. Mentre si utilizza un certificato di marca con l'organizzazione inclusa, l'immagine viene visualizzata bene. Quindi immagino che siano certificati gratuiti rispetto a certificati di marca o l'organizzazione dichiarata in esso.
Tritof

3

Ho appena provato, dopo aver sostituito l'immagine (senza cambiare il nome dell'immagine)

  • Apri l'email in un nuovo browser, mostra la nuova immagine

  • Ctrl + f5 (forza un aggiornamento della cache) nel chrome (il mio browser predefinito), mostra anche la nuova immagine


1

Verifica che il tipo di contenuto restituito per il file immagine dal tuo server sia corretto.

Puoi verificarlo usando Fiddler.


1

Nel mio caso la dimensione del file era il problema, era di 22 Mb (lo so, vero?), E dopo aver ridotto le dimensioni tutto ha iniziato a funzionare come un incantesimo.

Controlla la dimensione del file e, se è troppo grande, comprimilo.


Bella presa. Il messaggio di errore di Gmail fa sembrare che si trattasse di un errore di digitazione o di autorizzazioni, il che era molto fuorviante.
Apparecchio

1

So che questa è una vecchia domanda ma ho incontrato questo problema. Nel mio caso le immagini sono archiviate su Google Cloud Storage. Ciò che è interessante è quel collegamento

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

restituisce 307 (reindirizzamento temporaneo) e Locationun'intestazione contenente qualcosa di simile

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

Sembra che GoogleImageProxy non elabori 307 correttamente


Questo è vero, avevo bisogno di impostare un bilanciamento del carico e CDN con il mio backend come bucket, ora le mie immagini funzionano correttamente sul cloud storage
Wendel Nascimento

0

Ho una soluzione perfetta di questo problema, che ha funzionato per me se stai usando PHPMailer, devi solo aggiungere un'altra opzione in PHPMailer per allegare un'immagine come questa

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

Qui abbiamo dato il percorso assoluto dell'immagine e gli abbiamo dato un nome chiamato "logoimg" o quello che vuoi.

Ora puoi aggiungere questo logoimg ovunque nel tuo corpo HTML in questo modo

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

È tutto.



0

Ho riscontrato questo problema durante l'invio di GIF. Ho scoperto che la dimensione del file è importante per il server proxy di Google. Suggerisco di rendere i file più piccoli possibile e vedere se funziona. Puoi utilizzare il tuo account Gmail e aggiungere una foto da un URL da testare. Se la gif viene visualizzata durante la composizione della tua email, sarà ricevibile.

codifica felice.


0
  1. Funziona da Outook / hotmail? Dovrebbe quindi essere possibile isolarlo come problema di Google. Nel tuo caso non lo è.
  2. La dimensione dell'immagine può essere un problema. Prova a ridurlo e vedi
  3. www.miosito.com questo sito potrebbe essere accessibile dal tuo sistema. Ma è accessibile anche dal server di Google?
  4. Prova a cambiare estensione .. questo è il trucco: potresti aver provato diverse cose ma verrebbe comunque recuperato dalla cache (il che invalida i tuoi sforzi) ma quando l'estensione cambia, recupera di nuovo e tutto il lavoro che hai fatto prima entra in gioco e se funziona potresti pensare che sia l '"estensione" che ha fatto il trucco !! (come molti di coloro che parlano di estensioni)

0

Nel mio caso in cui mi imbattevo in questo problema, il problema era che accidentalmente il percorso dell'immagine nel modello di e-mail aveva tre barre nell'URL, ad es https:///content.example.org/image.png. Questo era difficile da individuare e, mentre funzionava in altri client di posta elettronica che potevano risolvere correttamente l'URL, il proxy di immagine di Google non era in grado di gestirlo e risultava in un 404 per l'indirizzo dell'immagine proxy.


-1

Assicurati che Gmail richieda la tua immagine http, non https.

Diciamo che il tuo normale URL dell'immagine è:

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

Quindi cambia in:

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

Ho la forte sensazione che il proxy di Google non memorizzi nella cache https.


Buon punto, il sito sta sicuramente utilizzando https, quindi quella potrebbe essere stata la causa
RonnyKnoxville

19
"Ho la netta sensazione che il proxy di Google non memorizzi nella cache https." - la tua sensazione è sbagliata
Will

1
Questo ha funzionato! Stavo cercando di copiare e incollare una cella del foglio di calcolo di Google che conteneva un'immagine esterna in un'e-mail, utilizzando http mentre il protocollo funzionava.
Grafico

Questo è sbagliato, perché Google non sarebbe in grado di memorizzare nella cache l'immagine su https?
mancino93

Google non ha menzionato nulla su una causa legale contro https, quindi il forte sentimento è sprecato
Blue Clouds

-7

È il 6 marzo e probabilmente l'hai già capito, ma ho pensato di intervenire per aiutare gli altri. Ho scoperto che i JPG non funzionano in Gmail. Il formato PNG funziona alla grande. Scusa non so spiegare perché, ma a volte è meglio non chiedere perché. Usa PNG!


Non posso credere che Google lo consideri effettivamente una soluzione. Indipendentemente da ciò, lo proverò perché le nostre newsletter sono distrutte per i nostri utenti Gmail.
Nathan Beach

Questo non è vero, Gmail supporta jpeg
Will

Supporta
jpg

L usa png e ottieni lo stesso problema.
Eduardo Nobre
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.