ti-enxame.com

Novo cache de imagens do Gmail está quebrando links de imagens em newsletter

Eu recebi alguns e-mails automáticos que são enviados após a conclusão da inscrição para o meu site.

Até recentemente, eles funcionavam bem. Agora O novo sistema do Google está reescrevendo as imagens e armazenando-as em seu cache (supostamente)

No entanto, a nova reescrita dos meus links de imagem do Google os está quebrando completamente, dando um erro 500 e uma imagem de link quebrada.

Digamos que meu URL de imagem normal seja:

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

O Google está reescrevendo isso para:

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

No entanto, não há nada nesse URL.

Email showing image errors

Então, ou há algo errado com os links que estão sendo criados pelo Google ou as imagens simplesmente não estão sendo enviadas para o servidor googleusercontent, mas não tenho idéia de como resolver o problema.

Im usando PHP, a biblioteca phpmailer e um servidor Ubuntu no Amazon EC2, mas não tenho certeza que está relacionado ao problema.

68
JackalopeZero

Acho que descobri o problema do GoogleImageProxy. 

Isso é algo relacionado ao conceito CACHING. Suponha que você tenha implantado recentemente seu código php em seu servidor, mas esqueceu de fazer upload de imagens. você testou uma vez com sua lógica de e-mail. seu sistema gerou um email em HTML. Quando esse email chegar ao servidor do Gmail, o GoogleImageProxy tentará buscar e armazenar as imagens do seu site em seu próprio servidor proxy. Ao buscar as imagens, o GoogleImageProxy encontrou alguns status 404 contra suas imagens ausentes e 403 contra algumas imagens protegidas. O GoogleImagesProxy armazenou esses status em seu próprio servidor proxy. 

Agora tentei abrir o seu email, você notou alguns status 404 contra suas imagens. Isso é algo compreensível. Você imediatamente percebeu que esqueceu de carregar algumas imagens, então as enviou para o seu servidor. e também você fixou algumas permissões contra imagens protegidas. 

Você está tudo pronto agora. Agora você tenta executar seu script php-email novamente. Como resultado, você recebe outro e-mail na sua caixa de entrada do Gmail ou do Hotmail. você corrigiu todos os problemas com suas imagens. Agora as imagens devem ser exibidas em seu conteúdo de email. mas você ainda não consegue ver as imagens. 

Ah, possivelmente você esqueceu de limpar o cache do seu navegador. Limpe o cache do seu navegador e carregue a página do Gmail ou do Hotmail novamente. Mas o resultado ainda será o mesmo. Tente aplicar dezenas de correções/correções e tente executar seu script php-email milhares de vezes. Mas o resultado ainda será o mesmo. Sem melhora.

O PROBLEMA REAL

O que diabos está acontecendo? Deixe-me explicar isso para você. Vá para o seu log de acesso e tente encontrar solicitações do GoogleImageProxy. Você ficará surpreso ao ver que haverá apenas duas ou três solicitações do GoogleImageProxy, dependendo do número de imagens diferentes usadas no seu e-mail. O GoogleImageProxy nunca tentou buscar imagens Mesmo depois de corrigir os problemas com suas imagens, carregando imagens ausentes e definindo permissões para imagens protegidas. Por quê? Limpar o cache do seu navegador não tem impacto. O GoogleImageProxy nunca buscará as imagens novas, mesmo para seus e-mails mais recentes, porque as imagens agora são armazenadas em cache no GoogleImageProxy, juntamente com seu último código de status, e não são armazenadas em cache no seu próprio navegador. 

O GoogleImageProxy definiu sua própria data de expiração para as imagens. Eu acho que um mês. então agora a nova cópia das imagens será buscada após a data de expiração. Quero dizer depois de um mês. Você não pode forçar o GoogleImageProxy a buscar as imagens. Mas é importante para você exibir imagens em seu email. Qual pode ser a solução?

A SOLUÇÃO

A seguir, a única maneira de forçar o GoogleImageProxy a buscar suas imagens 

  • Renomeie suas imagens para outra coisa apenas com extensões png, jpg ou gif .
  • Não use nenhum tipo de string de consulta no seu URL de imagem como ?t=34343
  • sua imagem deve incluir png, jpg ou gif como uma extensão.
  • o URL da sua imagem deve ser mapeado diretamente na sua imagem.
  • Se você precisar usar algum URL de proxy para suas imagens protegidas, sua resposta deve incluir o cabeçalho apropriado, como Content-Type: image/jpeg
  • A extensão do arquivo e o cabeçalho do tipo de conteúdo devem corresponder
  • O código de status deve ser 200 em vez de 403, 500, etc.

NOTA IMPORTANTE

Tente repetir todo o processo para cada execução do script php-email. porque toda vez que o GoogleImageProxy irá armazenar suas imagens em cache, você terá que repetir o mesmo processo para cada nova tentativa.

Espero que isso resolva o problema para a maioria das pessoas.

51
Malik Ahmed Khan Awan

Com base no seu exemplo, parece que você está usando extensões tradicionais (.jpg, .png, .gif). Algumas pessoas neste tópico , descrevendo os mesmos problemas que você está enfrentando, afirmaram que o uso dessas extensões resolve o problema.

Outras soluções possíveis:

25
JSuar

Eu estava tendo um problema semelhante, mas foi causado pelo tamanho do URL. O Google gera o seguinte URL ao armazenar em cache uma imagem do gmail:

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

O hash gerado é baseado no URL da imagem, mas o tamanho varia de acordo com os caracteres usados. Executei vários testes com URLs de tamanhos diferentes e descobri que a imagem em cache falharia ao carregar consistentemente (400/Invalid Request) se o hash exceder 2076 caracteres de comprimento (próximo a 2048 bytes + meta - não tenho certeza).

Novamente, o URL da imagem pode gerar um hash que excede esses muitos caracteres em ~ 1000 caracteres especiais ou mais de 1500 caracteres simples. Se o hash exceder 2076 caracteres, a solicitação falhará.

Eu sei que este é um post antigo, mas espero que isso ajude outros desenvolvedores a vasculhar o Google

6
Mahdi.Montgomery

Eu sei que esta é uma pergunta antiga, mas a mesma coisa aconteceu comigo. Quando eu chequei meus logs de acesso, isso é o que eu encontrei - 

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

Você pode ver que meu servidor estava bloqueando oGOOGLEIMAGEPROXYdando-lhe um 403 Forbidden reply. Eu decidi verificar meu .htaccess e com certeza eu estava bloqueando o termoPROXY. Depois de remover o termo, as imagens aparecem bem no Gmail. Espero que ajude.

5
Manish Pradhan

Eu apenas tentei, Depois de substituir a imagem (sem alterar o nome da imagem)

  • Abra e-mail no novo navegador, mostra nova imagem 

  • Ctrl + f5 (força uma atualização de cache) no chrome (meu navegador padrão), Também mostra nova imagem

3
safin chacko

Locais de imagem HTTPS fazem cache. Vários de nossos ambientes de produção não têm problemas com localizações de imagem proxy do gmail usando um uri HTTPS. Eu pude ver o Gmail ignorando seu conteúdo se o certificado SSL for inválido de alguma forma.

2
DDS

No meu caso, o tamanho do arquivo foi o problema, foi 22 Mb (eu sei certo?), E depois que reduzimos o tamanho tudo começou a funcionar como um encanto.

Verifique o tamanho do arquivo e, se for muito grande, compacte-o.

1
vishes_shell

Verifique se o tipo de conteúdo retornado para o arquivo de imagem pelo seu servidor está correto.

Você pode verificar isso usando o Fiddler.

1
Softlion

Certifique-se de que o Gmail solicite sua imagem em http, não https.

Digamos que seu URL de imagem normal seja:

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

Então mude para:

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

Tenho a forte impressão de que o proxy do Google não armazena em cache https.

0
Pedro Vagner
0
Naved Khan

Eu tenho uma solução perfeita deste problema, que funcionou para mim, se você estiver usando o PHPMailer, então você só tem que adicionar outra opção no PHPMailer para anexar imagem como esta

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

Aqui nós damos o caminho absoluto da imagem e damos a ela um nome chamado 'logoimg' ou o que você quiser.

Agora você pode adicionar este logoimg a qualquer lugar no seu Corpo 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();

Isso é tudo. 

0
Arjun Choudhary