Cache gambar baru Gmail merusak link gambar di buletin

105

Saya mendapat beberapa email otomatis yang dikirim setelah menyelesaikan pendaftaran untuk situs saya.

Sampai saat ini, mereka bekerja dengan baik. Sekarang sistem baru Google sedang menulis ulang gambar dan menyimpannya dalam cache (seharusnya)

Namun, Google yang baru menulis ulang tautan gambar saya benar-benar merusaknya, memberikan kesalahan 500 dan gambar tautan rusak.

Katakanlah url gambar normal saya adalah:

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

Google menulis ulang ini menjadi:

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

Namun, tidak ada apa pun di URL itu.

Email menampilkan kesalahan gambar

Jadi, entah ada yang salah dengan tautan yang dibuat oleh Google atau gambarnya tidak diunggah ke server konten google, tapi saya tidak tahu bagaimana mengatasi masalah tersebut.

Saya menggunakan PHP, pustaka phpmailer, dan server Ubuntu di Amazon EC2, tetapi saya tidak yakin itu terkait dengan masalah tersebut.

RonnyKnoxville
sumber
apakah Anda memiliki fitur keamanan di server Anda atau logika yang menyajikan gambar? apakah ini hanya tersedia untuk waktu yang terbatas atau fitur semacam ini?
Pixou
Tidak ada jenis fitur keamanan atau sistem login untuk melihat gambar, mereka ada di folder publik di sistem. Jika Anda mengunjungi tautan asli, gambar dapat dilihat. Masalahnya adalah penulisan ulang url Google tidak mengunggah gambar ke server mereka atau tidak mengarahkan pengguna ke situs saya dengan benar.
RonnyKnoxville
1
Setelah blog dan posting ditinjau, tidak ada solusi nyata yang ditemukan untuk masalah acak ini (Maret 2013). Saya salah ?
kheraud
4
ini membuatku benar-benar gila. google memiliki email rusak. Saya telah aktif di beberapa utas terkait di forum google dan tidak bisa mendapatkan daya tarik. ini telah rusak sejak awal Desember 2013.
Pantai Nathan
Apakah ini pergi kemana-mana? Aku menarik rambutku keluar. Gambar dapat diakses publik, memuat dengan baik ketika pergi langsung ke mereka, jenis konten cocok dan server proxy google mendapatkan apa-apa selain 200 OK di log saya. Saya tidak tahu mengapa gambar tidak muncul di gmail.
Matt Brunmeier

Jawaban:

83

Saya rasa saya telah menemukan masalah GoogleImageProxy.

Ini adalah sesuatu yang terkait dengan konsep CACHING. misalkan, Anda baru-baru ini menyebarkan kode php Anda di server Anda tetapi Anda lupa mengunggah gambar. Anda menguji sekali dengan logika email Anda. sistem Anda menghasilkan email HTML. Saat email ini masuk ke server gmail, GoogleImageProxy akan mencoba mengambil dan menyimpan gambar dari situs Anda ke server proxynya sendiri. saat mengambil gambar, GoogleImageProxy menemukan 404 status pada gambar yang hilang dan 403 pada beberapa gambar yang dilindungi. GoogleImagesProxy telah menyimpan status ini ke server proxy-nya sendiri.

Sekarang coba buka email Anda, Anda melihat beberapa 404 status pada gambar Anda. Ini adalah sesuatu yang bisa dimengerti. Anda segera menyadari bahwa Anda lupa mengunggah beberapa gambar, jadi Anda mengunggahnya ke server Anda. dan juga Anda telah memperbaiki beberapa izin terhadap gambar yang dilindungi.

Anda sudah selesai sekarang. Sekarang Anda mencoba menjalankan skrip php-email Anda sekali lagi. Hasilnya, Anda menerima email lain di kotak masuk Gmail atau Hotmail Anda. Anda telah memperbaiki semua masalah dengan gambar Anda. Sekarang gambar harus ditampilkan di konten email Anda. tetapi Anda masih tidak dapat melihat gambarnya.

Ah, mungkin Anda lupa membersihkan cache browser Anda. Kosongkan cache browser Anda dan muat halaman gmail atau hotmail sekali lagi. Tapi hasilnya akan tetap sama. Coba terapkan lusinan perbaikan / tambalan dan coba jalankan skrip php-email Anda ribuan kali. Tapi hasilnya akan tetap sama. Tidak ada perbaikan.

MASALAH NYATA

Apa yang sedang terjadi? Biarkan saya menjelaskannya kepada Anda. Buka log akses Anda dan coba temukan permintaan dari GoogleImageProxy. Anda akan terkejut melihat bahwa hanya akan ada 2 atau 3 tiga permintaan dari GoogleImageProxy tergantung pada jumlah gambar berbeda yang digunakan di email Anda. GoogleImageProxy tidak pernah mencoba mengambil gambar Bahkan setelah Anda memperbaiki masalah dengan gambar Anda dengan mengupload gambar yang hilang dan mengatur izin untuk gambar yang dilindungi. Mengapa? Menghapus cache browser Anda tidak berdampak apa-apa. GoogleImageProxy tidak akan pernah mengambil gambar baru bahkan untuk email Anda yang lebih baru karena gambar sekarang di-cache ke GoogleImageProxy bersama dengan kode status terakhirnya dan tidak di-cache di browser Anda sendiri.

GoogleImageProxy telah menyetel tanggal kedaluwarsa sendiri untuk gambar tersebut. Saya pikir satu bulan. jadi sekarang salinan gambar baru akan diambil setelah tanggal kedaluwarsa. Maksud saya setelah satu bulan. Anda tidak dapat memaksa GoogleImageProxy untuk mengambil gambar. Tetapi penting bagi Anda untuk menampilkan gambar di email Anda. Apa solusinya?

SOLUSINYA

Berikut adalah satu-satunya cara untuk memaksa GoogleImageProxy mengambil gambar Anda

  • Ubah nama gambar Anda menjadi gambar lain dengan ekstensi png, jpg atau gif saja.
  • Jangan gunakan string kueri apa pun di url gambar Anda seperti ?t=34343
  • gambar Anda harus menyertakan png, jpg atau gif sebagai ekstensi.
  • url gambar Anda harus dipetakan ke gambar Anda secara langsung.
  • Jika Anda perlu menggunakan beberapa url proxy untuk gambar yang dilindungi maka tanggapan Anda harus menyertakan tajuk yang tepat seperti Content-Type: image/jpeg
  • Ekstensi file dan header jenis konten harus cocok
  • Kode status harus 200 bukannya 403, 500 dll

CATATAN PENTING

Coba ulangi seluruh proses untuk setiap menjalankan skrip php-email. karena setiap kali GoogleImageProxy akan menyimpan gambar Anda dan Anda harus mengulangi proses yang sama untuk setiap percobaan baru.

Semoga ini akan memperbaiki masalah bagi kebanyakan orang.

Malik Ahmed Khan Awan
sumber
9
tl; dr: Anda mungkin menggunakan .svg, gunakan .png .jpg atau .gif
taylorstine
2
ya, jangan gunakan svg;)
Alexandre Martini
1
Kami memiliki gambar yang disajikan dari Penyimpanan Blob Azure yang memiliki ruang di nama file. Gambar tidak akan ditampilkan dengan benar di Gmail. Ketika kami menghapus ruang di nama file, itu memperbaiki masalah.
Narthring
1
@AlexandreMartini mengapa tidak menggunakan SVG? Logo adalah yang terbaik dalam SVG, bukan?
Trainoasis
1
Pastikan Anda melakukan urlencode jalur gambar Anda. Kami memiliki ruang di jalur tersebut, dan meskipun browser akan menggantinya dengan% 20, cache gmail tidak dan menganggapnya sebagai tautan rusak.
Chad Richards
29

Berdasarkan contoh Anda, sepertinya Anda menggunakan ekstensi tradisional (.jpg, .png, .gif). Beberapa orang di utas ini , menjelaskan masalah yang sama yang Anda hadapi, telah menyatakan bahwa menggunakan ekstensi tersebut menyelesaikan masalah.

Solusi lain yang mungkin:

JSuar
sumber
1
Ini adalah banyak sumber yang saya temukan ketika meneliti masalah ini sendiri, sayangnya tidak ada yang memberi saya jawaban yang saya cari. Saya masih berharap Google akan menyelesaikan masalah ini sebelum saya berhasil menemukan jawabannya
RonnyKnoxville
@JackalopeZero Sudahkah Anda mencoba mereplikasi masalah ini secara independen di luar buletin? Saya mencobanya di gmail pribadi dan perusahaan saya dengan hasil yang sukses. Saya tahu ini masalah, tetapi mungkin membuat email baru dengan gambar dapat menjelaskan apa yang terjadi.
JSuar
4
Terima kasih atas tip tentang ekstensi. Saya menggunakan .svggambar, dan itu dipastikan tidak didukung oleh proxy Google.
Nick Merrill
1
Saya mengalami ini sendiri hari ini. Bagi saya, proxy Google membuat kesalahan 500 untuk 1x1 transparan pixel.gif. Mengubah ini menjadi transparan 1x1 pixel.pngdan proxy disajikan seperti yang diharapkan. Aneh.
deefour
8

Saya mengalami masalah serupa, tetapi itu disebabkan oleh panjangnya URL. Google menghasilkan URL berikut saat menyimpan gambar dari gmail:

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

Hash yang dihasilkan didasarkan pada URL gambar, tetapi ukurannya akan bervariasi berdasarkan karakter yang digunakan. Saya menjalankan beberapa tes dengan URL dengan ukuran berbeda, dan menemukan gambar yang di-cache akan gagal dimuat secara konsisten (400 / Permintaan Tidak Valid) jika panjang hash melebihi 2076 karakter (mendekati 2048 byte + meta? Tidak yakin).

Sekali lagi, URL gambar dapat menghasilkan hash yang melebihi banyak karakter ini pada ~ 1000 karakter khusus, atau 1500+ karakter sederhana. Jika panjang hash melebihi 2.076 karakter, permintaan gagal.

Saya menyadari ini adalah posting lama, tapi semoga ini membantu devs lain menjelajahi Google

Mahdi.Montgomery
sumber
6

Saya tahu ini adalah pertanyaan lama tetapi hal yang sama terjadi pada saya. Ketika saya memeriksa log akses saya, inilah yang saya temukan -

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

Anda dapat melihat bahwa server saya memblokir GOOGLEIMAGEPROXY dan memberinya balasan 403 Forbidden . Saya memutuskan untuk memeriksa .htaccess saya dan cukup yakin saya memblokir istilah PROXY . Setelah menghapus istilah tersebut, gambar muncul dengan baik sekarang di Gmail. Semoga membantu.

Manish Pradhan
sumber
Saya juga memiliki 403. Saya menemukan bahwa mod_security memblokir proxy Google ...
Peter
2
Inilah masalah yang saya alami. Anda dapat menguji apakah Anda mengalami masalah konfigurasi yang sama menggunakan 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

Lokasi gambar HTTPS melakukan cache. Beberapa lingkungan produksi kami tidak memiliki masalah dengan lokasi gambar proxy gmail yang menggunakan uri HTTPS. Saya dapat melihat gmail mengabaikan konten Anda jika sertifikat SSL tidak valid dalam beberapa hal.

DDS
sumber
Terima kasih atas pembaruannya. Meskipun beberapa waktu yang lalu sekarang saya tidak pernah menemukan solusi untuk jawaban ini
RonnyKnoxville
Bergantung pada pengalaman saya saat ini mencoba membuat email html dengan gambar yang disertakan dan dengan protokol https, saya mengonfirmasi bahwa itu tergantung pada sertifikat. Dengan menggunakan mari enkripsi tanpa organisasi di dalamnya, gambar diblokir di Gmail. Saat menggunakan sertifikat bermerek dengan organisasi disertakan, gambar akan muncul. Jadi saya kira itu adalah sertifikat gratis vs bermerek atau organisasi yang dinyatakan di dalamnya.
Tritof
3

Saya baru mencoba, setelah mengganti gambar (tanpa mengubah nama gambar)

  • Buka email di browser baru, itu menunjukkan gambar baru

  • Ctrl + f5 (memaksa penyegaran cache) di chrome (browser default saya), juga menampilkan gambar baru

safin chacko
sumber
1

Periksa apakah tipe konten yang dikembalikan untuk file gambar oleh server Anda sudah benar.

Anda dapat memeriksanya menggunakan Fiddler.

Softlion
sumber
1

Dalam kasus saya ukuran file adalah masalahnya, itu adalah 22 Mb (saya tahu kan?), Dan setelah kami mengurangi ukuran semuanya mulai bekerja seperti pesona.

Periksa ukuran file dan jika terlalu besar, kompres.

vishes_shell
sumber
Tangkapan bagus. Pesan kesalahan Gmail membuatnya tampak seperti kesalahan pengetikan atau kesalahan izin, yang sangat menyesatkan.
Luminer
1

Saya tahu ini adalah pertanyaan lama tetapi saya telah menemui masalah ini. Dalam kasus saya, gambar disimpan di Google Cloud Storage. Yang menarik adalah tautan itu

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

mengembalikan 307 (pengalihan sementara) dan Locationheader yang berisi sesuatu seperti

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

Sepertinya GoogleImageProxy tidak memproses 307 dengan benar

askazakov
sumber
Ini benar, saya perlu menyiapkan penyeimbang beban dan CDN dengan backend saya sebagai keranjang, sekarang gambar saya berfungsi dengan benar di penyimpanan awan
Wendel Nascimento
0

Saya memiliki solusi sempurna untuk masalah ini, yang berhasil untuk saya jika Anda menggunakan PHPMailer maka Anda hanya perlu menambahkan opsi lain di PHPMailer untuk melampirkan gambar seperti ini

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

Di sini kami telah memberikan jalur gambar absolut dan memberinya nama panggilan 'logoimg' atau apa pun yang Anda inginkan.

Sekarang Anda dapat menambahkan logoimg ini ke mana pun di Tubuh HTML Anda seperti ini

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

Itu saja.

Arjun Choudhary
sumber
0

Saya mengalami masalah ini saat mengirim gif. Saya menemukan bahwa ukuran file penting bagi server Proxy Google. Saya sarankan membuat file sekecil mungkin dan lihat apakah itu berfungsi. Anda dapat menggunakan akun Gmail Anda dan menambahkan foto dari URL untuk diuji. Jika gif muncul saat Anda menulis email, itu akan diterima.

selamat coding.

AtLeastTheresToast
sumber
0
  1. Apakah ini berfungsi dari Outook / hotmail? Seharusnya kita dapat mengisolasinya sebagai masalah google. Dalam kasus Anda, tidak demikian.
  2. Ukuran gambar bisa menjadi masalah. Coba kurangi dan lihat
  3. www.mysite.com situs ini mungkin dapat diakses dari sistem Anda. Tetapi apakah itu juga dapat diakses dari server google?
  4. Coba ubah ekstensi .. ini triknya: Anda mungkin telah mencoba beberapa hal tetapi masih akan mengambil dari cache (yang membatalkan upaya Anda) tetapi ketika ekstensi berubah, ekstensi itu mengambil lagi dan semua pekerjaan yang Anda lakukan sebelumnya mulai dijalankan dan jika berhasil, Anda mungkin mengira itu adalah 'ekstensi' yang berhasil !! (seperti banyak dari mereka yang berbicara tentang ekstensi)
Awan Biru
sumber
0

Dalam kasus saya mengalami masalah ini, masalahnya adalah jalur ke gambar di template email secara tidak sengaja memiliki garis miring tiga kali lipat di URL, mis https:///content.example.org/image.png. Ini sulit dikenali, dan saat berfungsi di klien email lain yang berhasil menyelesaikan URL, proxy gambar Google tidak dapat menanganinya dan menghasilkan 404 untuk alamat gambar yang diproksikan.

Adam Reis
sumber
-1

Pastikan bahwa Gmail meminta gambar Anda http, bukan https.

Katakanlah url gambar normal Anda adalah:

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

Jadi ubah ke:

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

Saya merasa kuat bahwa proxy Google tidak menyimpan cache https.

Pedro Vagner
sumber
Poin bagus, situs ini pasti menggunakan https sehingga itu bisa menjadi penyebabnya
RonnyKnoxville
19
"Saya merasa kuat bahwa proxy Google tidak menyimpan https dalam cache." - perasaan Anda salah
Akankah
1
Ini berhasil! Saya mencoba menyalin dan menempelkan sel spreadsheet Google yang berisi gambar eksternal ke dalam email, menggunakan http sebagai protokol bekerja.
Grafik
Ini salah, mengapa Google tidak dapat menyimpan gambar melalui https?
southpaw93
Google belum menyebutkan apa-apa tentang gugatan terhadap https, jadi perasaan yang kuat terbuang percuma
Blue Clouds
-7

Sekarang tanggal 6 Maret dan Anda mungkin sudah mengetahui hal ini, tetapi saya pikir saya akan ikut membantu orang lain. Saya menemukan bahwa JPG tidak berfungsi di gmail. Format PNG berfungsi dengan baik. Maaf saya tidak bisa menjelaskan kenapa, tapi terkadang lebih baik tidak bertanya kenapa. Gunakan PNG!

MaryM
sumber
Saya tidak percaya Google akan benar-benar menganggap itu sebagai solusi. Terlepas dari itu, saya akan mencobanya karena buletin kami dirusak untuk pengguna Gmail kami.
Pantai Nathan
Ini tidak benar, gmail mendukung jpegs
Akankah
Ini mendukung jpgs
managerger
L menggunakan png dan mendapatkan masalah yang sama.
Eduardo Nobre