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


105

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

최근까지 그들은 잘 작동했습니다. 이제 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 서버를 사용하고 있지만 문제와 관련이 있는지 확실하지 않습니다.


이미지를 제공하는 논리 또는 서버에 보안 기능이 있습니까? 제한된 시간 동안 만 사용할 수 있습니까, 아니면 이런 종류의 기능입니까?
Pixou 2014 년

이미지를 볼 수있는 보안 기능이나 로그인 시스템은 없으며 시스템의 공용 폴더에 있습니다. 원본 링크를 방문하면 이미지를 볼 수 있습니다. 문제는 Google의 URL 재 작성이 이미지를 서버에 업로드하지 않거나 사용자를 내 사이트로 올바르게 연결하지 않는다는 것입니다.
RonnyKnoxville 2014 년

1
블로그 및 게시물 검토 후이 무작위 문제에 대한 실제 해결 방법이 없습니다 (2013 년 3 월). 내가 틀렸어?
kheraud

4
이것은 나를 절대적으로 미치게 만든다. Google은 이메일을 망쳤습니다. 나는 Google 포럼의 여러 관련 스레드에서 활동했으며 관심을 끌 수 없습니다. 이것은 2013 년 12 월 초부터 깨졌습니다.
Nathan Beach

이게 어디로 갔나 요? 머리카락을 뽑아 내고 있어요. 이미지는 공개적으로 액세스 할 수 있으며 직접 이동할 때 제대로로드되고 콘텐츠 유형이 일치하며 Google의 프록시 서버는 내 로그에서 200 개의 OK 만 얻습니다. 이미지가 Gmail에 표시되지 않는 이유를 모르겠습니다.
Matt Brunmeier

답변:


83

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가 이미지를 캐시 할 때마다 매번 새로운 시도에 대해 동일한 프로세스를 반복해야하기 때문입니다.

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


9
TL; DR : 당신의 아마 사용 .svg, 사용 .PNG .JPG 또는 .gif 참고 대신
taylorstine

2
) 그래, SVG 사용하지 마십시오
알렉상드르 마티니

1
파일 이름에 공백이있는 Azure Blob Storage에서 제공되는 이미지가 있습니다. 이미지가 Gmail에서 올바르게 표시되지 않습니다. 파일 이름에서 공백을 제거하면 문제가 해결되었습니다.
Narthring

1
@AlexandreMartini SVG를 사용하지 않는 이유는 무엇입니까? 로고는 SVG에서 최고입니다.
trainoasis

1
이미지 경로를 urlencode해야합니다. 경로에 공백이 있었고 브라우저는이를 % 20으로 대체하지만 Gmail 캐시는 그렇지 않으며 끊어진 링크로 간주합니다.
Chad Richardson

29

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

기타 가능한 솔루션 :


1
이것들은 내가이 문제를 직접 조사 할 때 찾은 많은 소스들이다. 불행히도 그들 중 어느 것도 내가 찾고있는 답을주지 못한다. 임 아직도 내가 답을 찾아 관리 이전에 구글이이 문제를 해결할 수 있다고 기대
RonnyKnoxville

@JackalopeZero 뉴스 레터 외부에서이 문제를 독립적으로 복제하려고 했습니까? 내 개인 및 회사 Gmail에서 성공적인 결과를 얻었습니다. 나는 그것이 문제라는 것을 알고 있지만 아마도 이미지로 새 이메일을 작성하면 무슨 일이 일어나고 있는지 알 수 있습니다.
JSuar 2014 년

4
확장에 대한 팁을 주셔서 감사합니다. .svg이미지 를 사용하고 있었는데 Google 프록시에서 지원하지 않는 것으로 확인 되었습니다.
Nick Merrill

1
나는 오늘 이것을 직접 만났다. 나를 위해 Google의 프록시는 1x1 transparent에 대해 500 오류를 던졌습니다 pixel.gif. 이것을 1x1 투명으로 변경 pixel.png하면 프록시가 예상대로 작동합니다. 기묘한.
deefour

8

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

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

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

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

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


6

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

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에 정상적으로 표시됩니다. 도움이 되었기를 바랍니다.


나는 또한에 mod_security가 구글 프록시를 차단 파악 (403) I ... 한
피터

2
이것은 내가 가진 문제였습니다. 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 2015 년

3

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


업데이트 해주셔서 감사합니다. 그것은 얼마 전에했지만 지금은이 답변에 대한 해결책을 발견하지
RonnyKnoxville

이미지가 포함되고 https 프로토콜을 사용하여 html 이메일을 작성하려는 현재 경험에 따라 인증서에 따라 다르다는 것을 확인합니다. 조직이없는 암호화를 사용하면 Gmail에서 이미지가 차단됩니다. 조직이 포함 된 브랜드 인증서를 사용하는 동안 이미지가 잘 나타납니다. 그래서 나는 그것이 무료 대 브랜드 인증서이거나 그것에 선언 된 조직이라고 생각합니다.
Tritof

3

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

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

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


1

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

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


1

제 경우에는 파일 크기가 문제 였는데 22Mb (알아요?)이었고 크기를 줄인 후 모든 것이 매력적으로 작동하기 시작했습니다.

파일 크기 를 확인하고 너무 크면 압축하십시오.


좋은 캐치. Gmail의 오류 메시지는 입력 오류 또는 권한 오류 인 것처럼 보이며 이는 매우 오해의 소지가 있습니다.
Luminaire

1

나는 이것이 오래된 질문이라는 것을 알고 있지만이 문제를 만났습니다. 제 경우에는 이미지가 Google Cloud Storage에 저장됩니다. 흥미로운 것은 그 링크입니다

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

307 (임시 리디렉션) 및 Location다음과 같은 내용을 포함하는 헤더를 반환합니다.

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

GoogleImageProxy가 307을 올바르게 처리하지 않는 것 같습니다.


사실입니다. 백엔드를 버킷으로 사용하여로드 밸런서 및 CDN을 설정해야했습니다. 이제 이미지가 클라우드 스토리지에서 올바르게 작동합니다
Wendel Nascimento 19

0

이 문제에 대한 완벽한 솔루션이 있습니다. PHPMailer를 사용하는 경우 저에게 효과적입니다. 다음과 같은 이미지를 첨부하기 위해 PHPMailer에 다른 옵션을 추가해야합니다.

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

여기에서 이미지의 절대 경로를 지정하고 'logoimg'또는 원하는 이름으로 이름을 지정했습니다.

이제이 로고 이미지를 다음과 같이 HTML 본문의 어느 곳에 나 추가 할 수 있습니다.

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

그게 다야.



0

gif를 보낼 때이 문제가 발생했습니다. 파일 크기가 Google 프록시 서버에 중요하다는 것을 알았습니다. 파일을 가능한 한 작게 만들고 작동하는지 확인하는 것이 좋습니다. Gmail 계정을 사용하고 URL에서 사진을 추가하여 테스트 할 수 있습니다. 이메일을 작성할 때 GIF가 표시되면받을 수 있습니다.

행복한 코딩.


0
  1. Outook / hotmail에서 작동합니까? 그런 다음 Google 문제로 격리 할 수 ​​있습니다. 귀하의 경우에는 그렇지 않습니다.
  2. 이미지 크기가 문제가 될 수 있습니다. 그것을 줄이고보십시오
  3. www.mysite.com이 사이트는 시스템에서 액세스 할 수 있습니다. 그러나 Google 서버에서도 액세스 할 수 있습니까?
  4. 확장을 변경해보십시오. 이것은 트릭입니다. 몇 가지 시도를했지만 여전히 캐시에서 가져 오지만 (노력을 무효화) 확장이 변경되면 다시 가져오고 이전에 수행 한 모든 작업이 실행되고 트릭을 한 '확장'이라고 생각할 수도 있습니다! (확장에 대해 말하는 많은 사람들처럼)

0

이 문제가 발생한 경우 문제는 실수로 이메일 템플릿의 이미지 경로에 URL에 세 개의 슬래시가 있다는 것 https:///content.example.org/image.png입니다. 이것은 발견하기 어려웠고 URL을 성공적으로 확인할 수있는 다른 이메일 클라이언트에서 작동하는 동안 Google의 이미지 프록시가이를 처리 할 수 ​​없었고 프록시 된 이미지 주소에 대해 404가 발생했습니다.


-1

Gmail이 http아닌을 통해 이미지를 요청하는지 확인하십시오 https.

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

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

따라서 다음으로 변경하십시오.

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

나는 Google의 프록시가 캐시하지 않는다는 강한 느낌이 https있습니다.


좋은 점,이 사이트는 확실히 https를 사용하고 있으므로 원인이 될 수 있습니다
RonnyKnoxville 2014

19
"Google 프록시가 https를 캐시하지 않는다는 느낌이 듭니다." - 당신의 느낌은 잘못

1
이것은 효과가 있었다! 프로토콜이 작동하는 http를 사용하여 외부 이미지가 포함 된 Google 스프레드 시트 셀을 복사하여 이메일에 붙여 넣으려고했습니다.
그래프

이것은 잘못되었습니다. Google이 https를 통해 이미지를 캐시 할 수없는 이유는 무엇입니까?
southpaw93

강한 느낌이 낭비되도록 구글은 HTTPS에 대한 소송에 대해 아무것도 언급하지 않았습니다
블루 구름

-7

그것은 3 월 6 일이고 당신은 이미 이것을 알아 냈을 것입니다. 그러나 제가 다른 사람들을 돕기 위해 차임 할 것이라고 생각했습니다. JPG가 Gmail에서 작동하지 않는다는 것을 발견했습니다. PNG 형식은 훌륭하게 작동합니다. 이유를 설명 할 수 없어 미안하지만 때로는 이유를 묻지 않는 것이 좋습니다. PNG를 사용하십시오!


나는 구글이 실제로 그것을 해결책이라고 생각할 것이라고 믿을 수 없다. 어쨌든 Gmail 사용자를 위해 뉴스 레터가 망가 졌기 때문에 사용해 보겠습니다.
Nathan Beach

사실이 아닙니다. gmail은 jpeg를 지원합니다
Will

그것은 jpgs를 지원합니다
managerger

L은 png를 사용하고 같은 문제가 발생합니다.
Eduardo Nobre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.