O novo cache de imagens do Gmail está quebrando links de imagens em boletins informativos

105

Eu tenho alguns e-mails automáticos que são enviados após a conclusão da inscrição no 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 do Google para meus links de imagem está quebrando-os completamente, dando um erro 500 e uma imagem de link quebrada.

Digamos que o url de minha 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 mostrando erros de imagem

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 ideia de como resolver o problema.

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

RonnyKnoxville
fonte
você tem algum recurso de segurança em seu servidor ou lógica servindo a imagem? está disponível apenas por um tempo limitado ou este tipo de recursos?
Pixou
Não existe nenhum tipo de recurso de segurança ou sistema de login para visualizar as imagens, elas estão em uma pasta pública do sistema. Se você visitar o link original, as imagens podem ser visualizadas. O problema é que a reescrita do URL pelo Google não está enviando a imagem para seus servidores ou não direcionando corretamente o usuário ao meu site.
RonnyKnoxville
1
Após a revisão de blogs e postagens, nenhuma solução alternativa foi encontrada para esse problema aleatório (março de 2013). Eu estou errado ?
kheraud
4
isso está me deixando absolutamente louco. google quebrou e-mail. Tenho participado ativamente de vários tópicos relacionados nos fóruns do Google e não consigo pegá-lo. isto está quebrado desde o início de dezembro de 2013.
Nathan Beach
Isso foi para algum lugar? Estou puxando meu cabelo. As imagens são acessíveis ao público, carregam bem ao ir diretamente para elas, o tipo de conteúdo corresponde e o servidor proxy do Google está recebendo nada além de 200 OKs em meus registros. Não tenho ideia de por que as imagens não aparecem no gmail.
Matt Brunmeier

Respostas:

83

Acho que descobri o problema do GoogleImageProxy.

Isso é algo relacionado ao conceito de CACHING. suponha que você implantou recentemente seu código php em seu servidor, mas se esqueceu de enviar imagens. você testou uma vez com sua lógica de email. seu sistema gerou um e-mail em HTML. Quando este e-mail chegar ao servidor do gmail, 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 em relação às suas imagens ausentes e 403 em algumas imagens protegidas. GoogleImagesProxy armazenou esses status em seu próprio servidor proxy.

Agora que tentou abrir seu e-mail, você notou alguns status 404 em suas imagens. Isso é algo compreensível. Você imediatamente percebeu que esqueceu de fazer upload de algumas imagens, então você as carregou para o seu servidor. e também corrigiu algumas permissões contra imagens protegidas.

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

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

O REAL PROBLEMA

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

GoogleImageProxy definiu sua própria data de validade para as imagens. Acho que um mês. então agora a nova cópia das imagens será obtida após a data de expiração. Quero dizer, depois de um mês. Você não pode forçar GoogleImageProxy a buscar as imagens. Mas é importante que você exiba imagens em seu e-mail. Qual pode ser a solução?

A SOLUÇÃO

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

  • Renomeie suas imagens para algo diferente com extensões png, jpg ou gif apenas.
  • Não use qualquer tipo de string de consulta no URL da sua 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 adequado, 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 de email php. porque toda vez que o GoogleImageProxy armazenará em cache suas imagens e você terá que repetir o mesmo processo a cada nova tentativa.

Esperançosamente, isso resolverá o problema para a maioria das pessoas.

Malik Ahmed Khan Awan
fonte
9
tl; dr: provavelmente você está usando .svg, use .png .jpg ou .gif
taylorstine
2
sim, não use svg;)
Alexandre Martini
1
Tínhamos uma imagem sendo servida do Armazenamento de Blob do Azure que tinha um espaço no nome do arquivo. A imagem não era exibida corretamente no Gmail. Quando removemos o espaço no nome do arquivo, o problema foi corrigido.
Narthring,
1
@AlexandreMartini por que não usar SVG? O logotipo é melhor em SVG, não?
trainoasis de
1
Certifique-se de codificar seus caminhos de imagem. Tínhamos um espaço no caminho e, embora os navegadores o substituam por um% 20, o cache do gmail não o faz e o considera um link quebrado.
Chad Richardson
29

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:

JSuar
fonte
1
Estas são muitas das fontes que encontrei quando pesquisei este problema sozinho; infelizmente, nenhuma delas me deu a resposta que procuro. Ainda espero que o Google resolva esse problema antes que eu consiga encontrar uma resposta
RonnyKnoxville
@JackalopeZero você tentou reproduzir independentemente este problema fora do boletim informativo? Eu tentei no meu gmail pessoal e empresarial com resultados bem-sucedidos. Sei que é um problema, mas talvez criar um novo e-mail com imagens possa esclarecer o que está acontecendo.
JSuar
4
Obrigado pela dica sobre extensões. Eu estava usando .svgimagens e foi confirmado que elas não são compatíveis com o proxy do Google.
Nick Merrill
1
Corri para isso sozinho hoje. Para mim, o proxy do Google estava gerando um erro 500 para 1x1 transparente pixel.gif. Alterando isso para 1x1 transparente pixel.pnge o proxy atendido conforme o esperado. Esquisito.
deefour
8

Eu estava tendo um problema semelhante, mas foi causado pelo comprimento 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. Eu executei vários testes com URLs de tamanhos diferentes e descobri que a imagem em cache não carregaria de forma consistente (400 / Solicitação inválida) se o hash exceder 2.076 caracteres de comprimento (perto de 2.048 bytes + meta? Não tenho certeza).

Novamente, o URL da imagem pode gerar um hash que excede esse número de caracteres em aproximadamente 1000 caracteres especiais ou mais de 1500 caracteres simples. Se o hash exceder 2.076 caracteres de comprimento, a solicitação falhará.

Sei que esta é uma postagem antiga, mas espero que ajude outros desenvolvedores a vasculhar o Google

Mahdi.Montgomery
fonte
6

Eu sei que esta é uma pergunta antiga, mas a mesma coisa aconteceu comigo. Quando verifiquei meus registros de acesso foi o que 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 o GOOGLEIMAGEPROXY, dando a ele uma resposta 403 Proibido . Decidi verificar meu .htaccess e com certeza estava bloqueando o termo PROXY . Depois de remover o termo, as imagens agora aparecem bem no Gmail. Espero que ajude.

Manish Pradhan
fonte
Eu também tinha um 403. Descobri que o mod_security está bloqueando o proxy do Google ...
Peter
2
Este foi exatamente o problema que eu tive. Você pode testar se está tendo o mesmo problema de configuração 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

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

DDS
fonte
Obrigado pela atualização. Embora já tenha se passado algum tempo, nunca encontrei uma solução para essa resposta
RonnyKnoxville
Dependendo da minha experiência atual tentando criar e-mails html com imagens incluídas e com protocolos https, confirmo que depende do certificado. Usando vamos criptografar sem organização, a imagem é bloqueada no Gmail. Ao usar um certificado de marca com a organização incluída, a imagem é exibida. Portanto, acho que são certificados gratuitos ou de marca ou a organização declarada neles.
Tritof de
3

Acabei de tentar, depois de substituir a imagem (sem alterar o nome da imagem)

  • Abra o e-mail em um novo navegador, ele mostra uma nova imagem

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

Safin Chacko
fonte
1

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

Você pode verificar isso usando o Fiddler.

Softlion
fonte
1

No meu caso o tamanho do arquivo era o problema, era 22 Mb (sei bem?), E depois que reduzimos o tamanho tudo começou a funcionar perfeitamente.

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

vishes_shell
fonte
Boa pegada. A mensagem de erro do Gmail faz com que pareça um erro de digitação ou de permissão, o que é muito enganoso.
Luminária de
1

Eu sei que esta é uma pergunta antiga, mas encontrei este problema. No meu caso, as imagens são armazenadas no Google Cloud Storage. O que é interessante é aquele link

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

retorna 307 (redirecionamento temporário) e Locationcabeçalho contendo algo como

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

Parece que GoogleImageProxy não processa 307 corretamente

Askazakov
fonte
Isso é verdade, eu precisava configurar um balanceador de carga e CDN com meu back-end como um balde, agora minhas imagens funcionam corretamente no armazenamento em nuvem
Wendel Nascimento
0

Eu tenho uma solução perfeita para este 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 uma imagem como esta

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

Aqui, fornecemos o caminho absoluto da imagem e chamamos o nome de 'logoimg' ou o que você quiser.

Agora você pode adicionar este logoimg a qualquer lugar em 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.

Arjun Choudhary
fonte
0

Tive esse problema quando estava enviando GIFs. Descobri que o tamanho do arquivo é importante para o servidor proxy do Googles. Eu sugiro fazer os arquivos o mais pequenos possível e ver se isso funciona. Você pode usar sua conta do Gmail e adicionar uma foto de um URL para testar. Se o GIF aparecer quando você estiver redigindo seu e-mail, ele poderá ser recebido.

codificação feliz.

AtLeastTheresToast
fonte
0
  1. Está funcionando do Outook / hotmail? Deve então podemos isolá-lo como problema do Google. No seu caso, não.
  2. O tamanho da imagem pode ser um problema. Tente reduzi-lo e ver
  3. www.mysite.com este site pode ser acessado de seu sistema. Mas também é acessível a partir do servidor do Google?
  4. Tente mudar a extensão .. este é o truque: você pode ter tentado várias coisas, mas ainda assim buscaria do cache (o que invalida seus esforços), mas quando a extensão muda, ela busca novamente e todo o trabalho que você fez antes entra em ação e se funciona, você pode pensar que é a 'extensão' que fez o truque !! (como muitos daqueles que falam sobre extensões)
Nuvens Azuis
fonte
0

No meu caso de encontrar esse problema, o problema foi que acidentalmente o caminho para a imagem no modelo de e-mail tinha barras triplas no URL, por exemplo https:///content.example.org/image.png. Isso era difícil de detectar e, embora funcionasse em outros clientes de e-mail que conseguiam resolver o URL, o proxy de imagem do Google não foi capaz de lidar com isso e resultou em um erro 404 para o endereço da imagem com proxy.

Adam Reis
fonte
-1

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

Digamos que o url de sua imagem normal seja:

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

Então mude para:

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

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

Pedro Vagner
fonte
Bom ponto, o site está definitivamente usando https, então essa poderia ter sido a causa
RonnyKnoxville
19
"Tenho a forte sensação de que o proxy do Google não armazena https em cache." - seu sentimento está errado
Will
1
Isso funcionou! Eu estava tentando copiar e colar uma célula da planilha do Google que continha uma imagem externa em um e-mail, usando http como o protocolo funcionava.
Gráfico
Isso está errado, por que o Google não conseguiria armazenar a imagem em cache em https?
southpaw93
O Google não mencionou nada sobre um processo judicial contra https, então o forte sentimento foi desperdiçado
Nuvens Azuis,
-7

É 6 de março e você provavelmente já descobriu isso, mas pensei em intervir para ajudar outras pessoas. Descobri que JPGs não funcionam no gmail. O formato PNG funciona muito bem. Desculpe, não posso explicar por quê, mas às vezes é melhor não perguntar por quê. Use PNG!

MaryM
fonte
Não posso acreditar que o Google realmente consideraria isso uma solução. Independentemente disso, vou tentar porque nossos boletins informativos são destruídos para nossos usuários do Gmail.
Nathan Beach
Isso não é verdade, gmail faz jpegs de apoio
Will
É compatível com jpgs
managerger
Eu uso png e tenho o mesmo problema.
Eduardo Nobre