[image] Gmail의 새로운 이미지 캐싱이 뉴스 레터의 이미지 링크를 깨고 있습니다.

내 사이트에 대한 가입 완료시 발송되는 일부 자동 이메일이 있습니다.

최근까지 그들은 잘 작동했습니다. 이제 Google의 새로운 시스템은 이미지를 다시 작성하고 캐시에 저장합니다 (아마도).

그러나 Google의 새로운 이미지 링크 재 작성으로 인해 이미지 링크가 완전히 깨져 500 오류와 깨진 링크 이미지가 발생합니다.

내 일반 이미지 URL은 다음과 같습니다.

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

Google은이를 다음과 같이 다시 작성합니다.

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

그러나 해당 URL에는 아무것도 없습니다.

이미지 오류를 보여주는 이메일

따라서 Google에서 생성하는 링크에 문제가 있거나 이미지가 googleusercontent 서버에 업로드되지 않고 있지만 문제를 해결하는 방법을 모릅니다.

Amazon EC2에서 PHP, phpmailer 라이브러리 및 Ubuntu 서버를 사용하고 있지만 문제와 관련이 있는지 확실하지 않습니다.



답변

GoogleImageProxy 문제를 알아 낸 것 같습니다.

이것은 CACHING 개념과 관련된 것입니다. 최근에 서버에 PHP 코드를 배포했지만 이미지 업로드를 잊었다 고 가정합니다. 이메일 로직으로 한 번 테스트했습니다. 시스템에서 HTML 이메일을 생성했습니다. 이 이메일이 Gmail 서버에 도달하면 GoogleImageProxy는 사이트에서 자체 프록시 서버로 이미지를 가져와 저장하려고 시도합니다. 이미지를 가져 오는 동안 GoogleImageProxy는 누락 된 이미지에 대해 404 상태를 발견하고 일부 보호 된 이미지에 대해 403을 발견했습니다. GoogleImagesProxy는 이러한 상태를 자체 프록시 서버에 저장했습니다.

이제 이메일을 열려고 시도했을 때 이미지에 대해 404 상태가 있음을 발견했습니다. 이것은 이해할 수있는 것입니다. 일부 이미지를 업로드하는 것을 잊었으므로 즉시 서버에 업로드했습니다. 또한 보호 된 이미지에 대한 일부 권한을 수정했습니다.

이제 모두 끝났습니다. 이제 php-email 스크립트를 다시 한 번 실행 해보십시오. 결과적으로 Gmail 또는 Hotmail받은 편지함에서 다른 이메일을 받게됩니다. 이미지의 모든 문제를 해결했습니다. 이제 이미지가 이메일 콘텐츠에 표시되어야합니다. 하지만 여전히 이미지를 볼 수 없습니다.

아, 아마도 당신은 브라우저의 캐시를 지우는 것을 잊었을 것입니다. 브라우저의 캐시를 지우고 Gmail 또는 Hotmail 페이지를 다시로드하십시오. 그러나 결과는 여전히 동일합니다. 수십 개의 수정 / 패치를 적용하고 php-email 스크립트를 수천 번 실행 해보십시오. 그러나 결과는 여전히 동일합니다. 개선이 없습니다.

진짜 문제

도대체 무슨 일이야? 설명해 드리겠습니다. 액세스 로그로 이동하여 GoogleImageProxy에서 요청을 찾으십시오. 이메일에 사용 된 다른 이미지의 수에 따라 GoogleImageProxy에서 2 ~ 3 개의 요청 만 있다는 사실에 놀랄 것입니다. GoogleImageProxy는 이미지를 가져 오지 못했습니다. 누락 된 이미지를 업로드하고 보호 된 이미지에 대한 권한을 설정하여 이미지 문제를 해결 한 후에도. 왜? 브라우저의 캐시를 삭제해도 아무런 영향이 없습니다. 이미지는 이제 마지막 상태 코드와 함께 GoogleImageProxy에 캐시되고 자신의 브라우저에 캐시되지 않기 때문에 GoogleImageProxy는 새로운 이메일에 대해서도 새로운 이미지를 가져 오지 않습니다.

GoogleImageProxy는 이미지에 대한 자체 만료 날짜를 설정했습니다. 한 달은 생각합니다. 이제 만료일 이후에 이미지의 새 사본을 가져옵니다. 한 달 후를 의미합니다. GoogleImageProxy가 이미지를 가져 오도록 강제 할 수 없습니다. 그러나 이메일에 이미지를 표시하는 것이 중요합니다. 해결책은 무엇일까요?

해결책

다음은 GoogleImageProxy가 이미지를 가져 오도록하는 유일한 방법입니다.

  • png, jpg 또는 gif 확장자 만 사용하여 이미지 이름을 다른 이름으로 바꿉니다.
  • 다음과 같은 이미지 URL에 어떤 종류의 쿼리 문자열도 사용하지 마십시오. ?t=34343
  • 이미지에는 확장자로 png, jpg 또는 gif가 포함되어야합니다.
  • 이미지 URL은 이미지에 직접 매핑되어야합니다.
  • 보호 된 이미지에 프록시 URL을 사용해야하는 경우 응답에 다음과 같은 적절한 헤더가 포함되어야합니다.
    Content-Type: image/jpeg
  • 파일 확장자와 콘텐츠 유형 헤더가 일치해야합니다.
  • 상태 코드는 403, 500 등이 아닌 200이어야합니다.

중요 사항

php-email 스크립트를 실행할 때마다 전체 프로세스를 반복하십시오. GoogleImageProxy가 이미지를 캐시 할 때마다 매번 새로운 시도에 대해 동일한 프로세스를 반복해야하기 때문입니다.

이것이 대부분의 사람들에게 문제가 해결되기를 바랍니다.


답변

귀하의 예에 따르면 기존 확장자 (.jpg, .png, .gif)를 사용하고있는 것 같습니다. 이 스레드의 일부 사람들 은 직면하고있는 동일한 문제를 설명하며 이러한 확장을 사용하면 문제가 해결된다고 말했습니다.

기타 가능한 솔루션 :


답변

비슷한 문제가 있었지만 URL 길이로 인해 발생했습니다. Google은 Gmail에서 이미지를 캐싱 할 때 다음 URL을 생성합니다.

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

생성 된 해시는 이미지의 URL을 기반으로하지만 크기는 사용 된 문자에 따라 다릅니다. 크기가 다른 URL로 여러 테스트를 실행 한 결과 해시 길이가 2076자를 초과하면 캐시 된 이미지가 일관되게로드되지 않는 것으로 나타났습니다 (400 / 잘못된 요청 ).

다시 말하지만, 이미지 URL은 ~ 1000 특수 문자 또는 1500+ 단순 문자에서이 많은 문자를 초과하는 해시를 생성 할 수 있습니다. 해시 길이가 2076자를 초과하면 요청이 실패합니다.

이 글이 오래된 글이라는 것을 알고 있지만 다른 개발자가 Google을 수색하는 데 도움이되기를 바랍니다.


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 나에게도 같은 일이 일어났습니다. 내 액세스 로그를 확인했을 때 이것이 내가 찾은 것입니다.

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

내 서버가 GOOGLEIMAGEPROXY 를 차단하여 403 Forbidden 응답을 제공 했음을 알 수 있습니다 . .htaccess를 확인하고 PROXY 라는 용어를 차단하고 있는지 확인하기로 결정했습니다. . 용어를 제거하면 이미지가 이제 Gmail에 정상적으로 표시됩니다. 도움이 되었기를 바랍니다.


답변

HTTPS 이미지 위치는 캐시합니다. 일부 프로덕션 환경은 HTTPS URI를 사용하는 Gmail 프록시 이미지 위치에 문제가 없습니다. SSL 인증서가 어떤 식 으로든 유효하지 않은 경우 Gmail에서 콘텐츠를 무시하는 것을 볼 수 있습니다.


답변

나는 이미지를 교체 한 후 (이미지 이름을 변경하지 않고) 시도했습니다.

  • 새 브라우저에서 이메일 열기, 새 이미지 표시

  • 크롬 (내 기본 브라우저)에서 Ctrl + f5 (캐시 새로 고침 강제 실행), 새 이미지도 표시


답변

서버에서 이미지 파일에 대해 반환 된 콘텐츠 유형이 올바른지 확인하십시오.

Fiddler를 사용하여이를 확인할 수 있습니다.