Bộ nhớ đệm hình ảnh mới của Gmail đang phá vỡ các liên kết hình ảnh trong bản tin


104

Tôi có một số email tự động được gửi khi hoàn tất đăng ký cho trang web của tôi.

Cho đến gần đây, chúng hoạt động tốt. Bây giờ hệ thống mới của Google đang viết lại các hình ảnh và lưu trữ chúng trong bộ nhớ cache của nó (được cho là)

Tuy nhiên, việc viết lại các liên kết hình ảnh của tôi mới của Google đã phá vỡ chúng hoàn toàn, gây ra lỗi 500 và hình ảnh liên kết bị hỏng.

Giả sử url hình ảnh bình thường của tôi là:

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

Google đang viết lại điều này thành:

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

Tuy nhiên, không có gì tại URL đó.

Email hiển thị lỗi hình ảnh

Vì vậy, có điều gì đó sai với các liên kết đang được tạo bởi Google hoặc hình ảnh không được tải lên máy chủ googleusercontent, nhưng tôi không biết cách giải quyết vấn đề.

Tôi đang sử dụng PHP, thư viện phpmailer và máy chủ Ubuntu trên Amazon EC2, nhưng tôi không chắc điều đó có liên quan đến sự cố không.


bạn có bất kỳ tính năng bảo mật nào trong máy chủ của bạn hoặc logic phục vụ hình ảnh không? nó chỉ khả dụng trong một thời gian giới hạn hay loại tính năng này?
Pixou

Không có loại tính năng bảo mật hoặc hệ thống đăng nhập để xem hình ảnh, chúng nằm trong một thư mục chung trong hệ thống. Nếu bạn truy cập liên kết ban đầu, hình ảnh có thể xem được. Vấn đề là việc Google viết lại url không tải hình ảnh lên máy chủ của họ hoặc không hướng người dùng chính xác đến trang web của tôi.
RonnyKnoxville

1
Sau khi xem xét các blog và bài đăng, không có giải pháp thực sự nào được tìm thấy cho vấn đề ngẫu nhiên này (tháng 3 năm 2013). Tôi sai ?
kheraud

4
điều này khiến tôi hoàn toàn mất trí. google bị hỏng email. Tôi đã hoạt động trong một số chủ đề liên quan trên diễn đàn google và không thể nhận được lực kéo. điều này đã bị phá vỡ kể từ đầu tháng 12 năm 2013.
Nathan Beach

Điều này đã đi đến đâu? Tôi đang nhổ tóc. Hình ảnh có thể truy cập công khai, tải tốt khi xem trực tiếp, loại nội dung phù hợp và máy chủ proxy của google không nhận được gì ngoài 200 OK trong nhật ký của tôi. Tôi không biết tại sao hình ảnh không hiển thị trong gmail.
Matt Brunmeier

Câu trả lời:


83

Tôi nghĩ rằng tôi đã tìm ra vấn đề GoogleImageProxy.

Đây là một cái gì đó liên quan đến khái niệm CACHING. giả sử, gần đây bạn đã triển khai mã php trên máy chủ của mình nhưng bạn quên tải lên hình ảnh. bạn đã thử nghiệm một lần với logic email của mình. hệ thống của bạn đã tạo một email HTML. Khi email này đến máy chủ gmail, GoogleImageProxy sẽ cố gắng tìm nạp và lưu trữ hình ảnh từ trang web của bạn vào máy chủ proxy của chính nó. trong khi tìm nạp hình ảnh, GoogleImageProxy đã tìm thấy một số trạng thái 404 đối với hình ảnh bị thiếu của bạn và 403 đối với một số hình ảnh được bảo vệ. GoogleImagesProxy đã lưu trữ các trạng thái này vào máy chủ proxy của chính nó.

Bây giờ cố gắng mở email của bạn, bạn nhận thấy một số trạng thái 404 chống lại hình ảnh của bạn. Đây là điều dễ hiểu. Bạn ngay lập tức nhận ra rằng bạn đã quên tải lên một số hình ảnh, vì vậy bạn đã tải chúng lên máy chủ của mình. và bạn cũng đã sửa một số quyền đối với hình ảnh được bảo vệ.

Bây giờ bạn đã hoàn thành tất cả. Bây giờ bạn thử chạy lại tập lệnh php-email của mình. Kết quả là bạn nhận được một email khác trong hộp thư đến Gmail hoặc Hotmail của mình. bạn đã khắc phục tất cả các vấn đề với hình ảnh của mình. Bây giờ hình ảnh phải được hiển thị trong nội dung email của bạn. nhưng bạn vẫn không thể nhìn thấy hình ảnh.

À, có thể bạn đã quên xóa bộ nhớ cache của trình duyệt. Xóa bộ nhớ cache của trình duyệt và tải lại trang gmail hoặc hotmail. Nhưng kết quả sẽ vẫn vậy. Cố gắng áp dụng hàng chục bản sửa lỗi / bản vá và cố gắng chạy tập lệnh php-email của bạn hàng nghìn lần. Nhưng kết quả sẽ vẫn vậy. Không có cải thiện.

VẤN ĐỀ THỰC TẾ

Cái quái gì đang diễn ra vậy? Hãy để tôi giải thích cho bạn. Truy cập nhật ký truy cập của bạn và cố gắng tìm các yêu cầu từ GoogleImageProxy. Bạn sẽ ngạc nhiên khi thấy rằng sẽ chỉ có 2 hoặc 3 yêu cầu từ GoogleImageProxy tùy thuộc vào số lượng hình ảnh khác nhau được sử dụng trong email của bạn. GoogleImageProxy không bao giờ cố gắng tìm nạp hình ảnh Ngay cả sau khi bạn đã khắc phục sự cố với hình ảnh của mình bằng cách tải lên hình ảnh bị thiếu và đặt quyền cho hình ảnh được bảo vệ. Tại sao? Xóa bộ nhớ cache của trình duyệt không có tác động. GoogleImageProxy sẽ không bao giờ tìm nạp hình ảnh mới ngay cả đối với email mới hơn của bạn vì hình ảnh hiện được lưu vào bộ nhớ cache của GoogleImageProxy cùng với mã trạng thái cuối cùng của chúng và không được lưu vào bộ nhớ cache trong trình duyệt của riêng bạn.

GoogleImageProxy đã đặt ngày hết hạn của riêng mình cho các hình ảnh. Tôi nghĩ một tháng. vì vậy bây giờ bản sao mới của hình ảnh sẽ được tìm nạp sau ngày hết hạn. Ý tôi là sau một tháng. Bạn không thể buộc GoogleImageProxy tìm nạp hình ảnh. Nhưng điều quan trọng là bạn phải hiển thị hình ảnh trong email của mình. Giải pháp có thể là gì?

GIẢI PHÁP

Sau đây là cách duy nhất để buộc GoogleImageProxy tìm nạp hình ảnh của bạn

  • Đổi tên hình ảnh của bạn thành một cái gì đó khác chỉ với phần mở rộng png, jpg hoặc gif.
  • Không sử dụng bất kỳ loại chuỗi truy vấn nào trong url hình ảnh của bạn như ?t=34343
  • hình ảnh của bạn phải bao gồm png, jpg hoặc gif dưới dạng phần mở rộng.
  • url hình ảnh của bạn phải được ánh xạ trực tiếp vào hình ảnh của bạn.
  • Nếu bạn cần sử dụng một số url proxy cho hình ảnh được bảo vệ của mình thì phản hồi của bạn phải bao gồm tiêu đề thích hợp như Content-Type: image/jpeg
  • Phần mở rộng tệp và tiêu đề loại nội dung phải khớp
  • Mã trạng thái phải là 200 thay vì 403, 500, v.v.

LƯU Ý QUAN TRỌNG

Cố gắng lặp lại toàn bộ quy trình cho mỗi lần chạy tập lệnh php-email. bởi vì mỗi lần GoogleImageProxy sẽ lưu vào bộ nhớ cache hình ảnh của bạn và bạn sẽ phải lặp lại quy trình tương tự cho mỗi lần thử mới.

Hy vọng rằng điều này sẽ khắc phục sự cố cho hầu hết mọi người.


9
tl; dr: bạn có thể sử dụng .svg, sử dụng .png .jpg hoặc .gif thay
taylorstine

2
yeah, không sử dụng svg;)
Alexandre Martini

1
Chúng tôi có một hình ảnh đang được cung cấp từ Azure Blob Storage có một khoảng trống trong tên tệp. Hình ảnh sẽ không hiển thị chính xác trong Gmail. Khi chúng tôi xóa khoảng trống trong tên tệp, nó đã khắc phục được sự cố.
Tường thuật

1
@AlexandreMartini tại sao không sử dụng SVG? Logo là tốt nhất trong SVG, không?
trainoasis

1
Đảm bảo rằng bạn mã hóa các đường dẫn hình ảnh của mình. Chúng tôi có một khoảng trống trong đường dẫn và mặc dù các trình duyệt sẽ thay thế nó bằng% 20, nhưng bộ nhớ cache của gmail thì không và coi đó là một liên kết bị hỏng.
Chad Richardson

29

Dựa trên ví dụ của bạn, có vẻ như bạn đang sử dụng các phần mở rộng truyền thống (.jpg, .png, .gif). Một số người trên chủ đề này , mô tả các vấn đề tương tự mà bạn đang gặp phải, đã tuyên bố rằng việc sử dụng các phần mở rộng đó sẽ giải quyết được vấn đề.

Các giải pháp khả thi khác:


1
Đây là rất nhiều nguồn tôi đã tìm thấy khi tự nghiên cứu vấn đề này, tiếc là không có nguồn nào trong số đó cho tôi câu trả lời mà tôi đang tìm kiếm. Im vẫn hy vọng rằng Google sẽ giải quyết vấn đề này trước khi tôi quản lý để tìm một câu trả lời
RonnyKnoxville

@JackalopeZero bạn đã cố gắng sao chép độc lập vấn đề này bên ngoài bản tin chưa? Tôi đã thử trên gmail cá nhân và công ty với kết quả thành công. Tôi biết đó là một vấn đề nhưng có thể tạo một email mới với hình ảnh có thể làm sáng tỏ những gì đang xảy ra.
JSuar

4
Cảm ơn vì mẹo về tiện ích mở rộng. Tôi đang sử dụng .svghình ảnh và những hình ảnh đó được xác nhận là không được proxy của Google hỗ trợ.
Nick Merrill

1
Tôi đã tự mình gặp phải điều này ngày hôm nay. Đối với tôi, proxy của Google đã gây ra lỗi 500 cho 1x1 trong suốt pixel.gif. Thay đổi điều này thành 1x1 trong suốt pixel.pngvà proxy được phục vụ như mong đợi. Kỳ dị.
deefour

8

Tôi đang gặp sự cố tương tự nhưng do độ dài của URL gây ra. Google tạo URL sau khi lưu vào bộ nhớ đệm một hình ảnh từ gmail:

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

Hàm băm được tạo dựa trên URL của hình ảnh, nhưng kích thước sẽ khác nhau dựa trên các ký tự được sử dụng. Tôi đã chạy một số thử nghiệm với các URL có kích thước khác nhau và nhận thấy hình ảnh được lưu trong bộ nhớ cache sẽ không tải liên tục (400 / Yêu cầu không hợp lệ) nếu hàm băm vượt quá 2076 ký tự (gần 2048 byte + meta? Không chắc chắn).

Một lần nữa, URL hình ảnh có thể tạo ra một hàm băm vượt quá nhiều ký tự này ở ~ 1000 ký tự đặc biệt hoặc hơn 1500 ký tự đơn giản. Nếu hàm băm vượt quá 2076 ký tự, yêu cầu không thành công.

Tôi nhận ra đây là một bài đăng cũ, nhưng hy vọng điều này sẽ giúp các nhà phát triển khác tìm kiếm trên Google


6

Tôi biết đây là một câu hỏi cũ nhưng điều tương tự đã xảy ra với tôi. Khi tôi kiểm tra nhật ký truy cập của mình, đây là những gì tôi tìm thấy -

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

Bạn có thể thấy rằng máy chủ của tôi đang chặn GOOGLEIMAGEPROXY và đưa ra câu trả lời 403 Forbidden . Tôi quyết định kiểm tra .htaccess của mình và chắc chắn rằng tôi đã chặn thuật ngữ PROXY . Sau khi loại bỏ thuật ngữ, hình ảnh hiện đã xuất hiện tốt trên Gmail. Hy vọng rằng sẽ giúp.


Tôi cũng đã có một tôi 403. tìm ra mod_security đang chặn proxy của Google ...
Peter

2
Đây chính xác là vấn đề tôi gặp phải. Bạn có thể kiểm tra nếu bạn đang gặp vấn đề cấu hình tương tự sử dụng 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

Vị trí hình ảnh HTTPS làm bộ nhớ cache. Một số môi trường sản xuất của chúng tôi không gặp vấn đề gì với các vị trí hình ảnh ủy quyền trong Gmail bằng cách sử dụng tiểu HTTPS. Tôi có thể thấy gmail bỏ qua nội dung của bạn nếu chứng chỉ SSL không hợp lệ theo một cách nào đó.


Cảm ơn các cập nhật. Mặc dù đó là một trong khi trước đây bây giờ tôi không bao giờ tìm thấy một giải pháp cho câu trả lời này
RonnyKnoxville

Tùy thuộc vào kinh nghiệm hiện tại của tôi khi cố gắng tạo email html có bao gồm hình ảnh và với giao thức https, tôi xác nhận rằng điều đó phụ thuộc vào chứng chỉ. Sử dụng Let's mã hóa mà không có tổ chức nào trong đó, hình ảnh bị chặn trong Gmail. Trong khi sử dụng chứng chỉ có thương hiệu có tổ chức đi kèm, hình ảnh cũng hiển thị. Vì vậy, tôi đoán đó là chứng chỉ miễn phí so với chứng chỉ có thương hiệu hoặc tổ chức được khai báo trong đó.
Tritof

3

Tôi vừa thử, sau khi thay thế hình ảnh (không thay đổi tên hình ảnh)

  • Mở email trong trình duyệt mới, nó hiển thị hình ảnh mới

  • Ctrl + f5 (buộc làm mới bộ nhớ cache) trong chrome (trình duyệt mặc định của tôi), cũng hiển thị hình ảnh mới


1

Kiểm tra xem loại nội dung được máy chủ của bạn trả về cho tệp hình ảnh có đúng không.

Bạn có thể kiểm tra điều này bằng cách sử dụng Fiddler.


1

Trong trường hợp của tôi, kích thước tệp là vấn đề, nó là 22 Mb (tôi biết đúng không?), Và sau khi chúng tôi giảm kích thước, mọi thứ bắt đầu hoạt động như một sự quyến rũ.

Kiểm tra kích thước tệp và nếu nó quá lớn, hãy nén nó lại.


Tốt lắm. Thông báo lỗi của Gmail có vẻ như là lỗi đánh máy hoặc lỗi quyền, rất dễ gây hiểu lầm.
Đèn chiếu sáng

1

Tôi biết đây là một câu hỏi cũ nhưng tôi đã gặp vấn đề này. Trong trường hợp của tôi, hình ảnh được lưu trữ tại Google Cloud Storage. Điều thú vị là liên kết đó

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

trả về 307 (chuyển hướng tạm thời) và Locationtiêu đề chứa những thứ như

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

Có vẻ như GoogleImageProxy không xử lý đúng 307


Đây là sự thật, tôi cần thiết để thiết lập một cân bằng tải và CDN với backend của tôi như một cái xô, bây giờ hình ảnh của tôi làm việc một cách chính xác về lưu trữ đám mây
Wendel Nascimento

0

Tôi có một giải pháp hoàn hảo cho vấn đề này, giải pháp này phù hợp với tôi nếu bạn đang sử dụng PHPMailer thì bạn chỉ cần thêm một tùy chọn khác trong PHPMailer để đính kèm hình ảnh như thế này

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

Ở đây chúng tôi đã đưa ra đường dẫn tuyệt đối của hình ảnh và đặt tên cho nó là 'logoimg' hoặc bất cứ thứ gì bạn muốn.

Bây giờ bạn có thể thêm logoimg này vào bất kỳ đâu trong HTML Body của bạn như thế này

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

Đó là tất cả.



0

Tôi đã gặp sự cố này khi gửi ảnh gif. Tôi thấy rằng kích thước tệp quan trọng đối với máy chủ Proxy của Google. Tôi khuyên bạn nên tạo các tệp càng nhỏ càng tốt và xem cách đó có hiệu quả không. Bạn có thể sử dụng tài khoản Gmail của mình và thêm ảnh từ URL để kiểm tra. Nếu gif hiển thị khi bạn soạn email thì nó sẽ là khoản phải thu.

mã hóa vui vẻ.


0
  1. Nó có hoạt động từ Outook / hotmail không? Sau đó, chúng ta có thể cô lập nó như vấn đề của google. Trong trường hợp của bạn thì không.
  2. Kích thước của hình ảnh có thể là một vấn đề. Hãy thử giảm đi xem sao
  3. www.mysite.com trang web này có thể được truy cập từ hệ thống của bạn. Nhưng nó cũng có thể truy cập được từ máy chủ google?
  4. Hãy thử thay đổi tiện ích mở rộng .. đây là mẹo: Bạn có thể đã thử một số cách nhưng nó vẫn tìm nạp từ bộ nhớ cache (điều này làm mất hiệu lực của bạn) nhưng khi tiện ích thay đổi, nó sẽ tìm nạp lại và tất cả công việc bạn đã làm trước đó sẽ hoạt động và nếu nó hoạt động mà bạn có thể nghĩ đó là 'tiện ích mở rộng' đã thực hiện mánh khóe !! (giống như nhiều người nói về tiện ích mở rộng)

0

Trong trường hợp của tôi chạy vào vấn đề này, vấn đề là vô tình đường dẫn đến hình ảnh trong mẫu email có dấu gạch chéo ba trong URL, ví dụ https:///content.example.org/image.png. Điều này rất khó phát hiện và trong khi nó đang hoạt động trong các ứng dụng email khác có thể phân giải thành công URL, proxy hình ảnh của Google không thể xử lý nó và dẫn đến 404 cho địa chỉ hình ảnh được ủy quyền.


-1

Đảm bảo rằng Gmail đang yêu cầu hình ảnh của bạn httpchứ không phải https.

Giả sử url hình ảnh bình thường của bạn là:

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

Vì vậy, hãy thay đổi thành:

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

Tôi có cảm giác mạnh mẽ rằng proxy của google không lưu vào bộ nhớ cache https.


Tốt điểm, trang web chắc chắn được sử dụng https để có thể là nguyên nhân
RonnyKnoxville

19
"Tôi có cảm giác mạnh mẽ rằng proxy của google không lưu vào bộ nhớ cache https." - cảm giác của bạn là sai
Sẽ

1
Điều này đã hiệu quả! Tôi đang cố gắng sao chép và dán một ô bảng tính google có chứa hình ảnh bên ngoài vào email, sử dụng http như giao thức hoạt động.
Biểu đồ

Điều này là sai, tại sao google không thể cache hình ảnh qua https?
southpaw93,

Google đã không đề cập bất cứ điều gì về một vụ kiện chống lại https, vì vậy cảm giác mạnh là lãng phí
Blue Clouds

-7

Bây giờ là ngày 6 tháng 3 và bạn có thể đã hiểu ra điều này, nhưng nghĩ rằng tôi sẽ kêu gọi để giúp đỡ người khác. Tôi phát hiện ra rằng JPG không hoạt động trong gmail. Định dạng PNG hoạt động tốt. Xin lỗi, tôi không thể giải thích tại sao, nhưng đôi khi tốt hơn là không nên hỏi tại sao. Sử dụng PNG!


Tôi không thể tin rằng Google sẽ thực sự coi đó là một giải pháp. Bất kể tôi sẽ thử nó vì các bản tin của chúng tôi đã bị phá hủy đối với người dùng Gmail của chúng tôi.
Bãi biển Nathan

Điều này không đúng, gmail không hỗ trợ jpegs
Sẽ

Nó hỗ trợ jpgs
managerger

L sử dụng png và nhận được cùng một vấn đề.
Eduardo Nobre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.