it-swarm-id.com

Caching gambar baru Gmail memutus tautan gambar dalam buletin

Saya punya beberapa email otomatis yang dikirim setelah pendaftaran selesai untuk situs saya.

Sampai baru-baru ini, mereka bekerja dengan baik. Sekarang Sistem baru Google menulis ulang gambar dan menyimpannya di cache (seharusnya)

Namun, penulisan ulang baru Google pada tautan gambar saya benar-benar memutuskannya, memberikan 500 kesalahan dan gambar tautan rusak.

Katakanlah url gambar normal saya adalah:

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

Google sedang menulis ulang ini untuk:

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

Namun, tidak ada di URL itu.

Email showing image errors

Jadi, ada yang salah dengan tautan yang sedang dibuat oleh Google atau gambarnya tidak diunggah ke server googleusercontent, tapi saya tidak tahu bagaimana menyelesaikan masalah ini.

Saya menggunakan PHP, perpustakaan phpmailer dan server Ubuntu di Amazon EC2, tapi saya tidak yakin itu terkait dengan masalah ini.

68
JackalopeZero

Saya pikir saya sudah menemukan masalah GoogleImageProxy.  

Ini adalah sesuatu yang berkaitan dengan konsep CACHING. misalkan, Anda baru saja menyebarkan kode php Anda di server Anda tetapi Anda lupa mengunggah gambar. Anda diuji sekali dengan logika email Anda. sistem Anda menghasilkan email HTML. Ketika email ini mengenai server gmail, GoogleImageProxy akan mencoba mengambil dan menyimpan gambar dari situs Anda ke server proxy sendiri. saat mengambil gambar, GoogleImageProxy menemukan sekitar 404 status terhadap gambar Anda yang hilang dan 403 terhadap beberapa gambar yang dilindungi. GoogleImagesProxy telah menyimpan status ini ke server proxy sendiri. 

Sekarang coba buka email Anda, Anda melihat beberapa 404 status terhadap gambar Anda. Ini 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 semua selesai sekarang. Sekarang Anda mencoba menjalankan skrip php-email Anda sekali lagi. Akibatnya, 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 gambar. 

Ah, mungkin Anda lupa menghapus cache browser Anda. Bersihkan cache browser Anda dan muat halaman gmail atau hotmail sekali lagi. Tetapi hasilnya akan tetap sama. Cobalah untuk menerapkan lusinan perbaikan/tambalan dan coba jalankan skrip php-email Anda ribuan kali. Tetapi hasilnya akan tetap sama. Tidak ada perbaikan.

MASALAH NYATA

Apa yang sedang terjadi? Biarkan saya jelaskan 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 yang berbeda yang digunakan dalam email Anda. GoogleImageProxy tidak pernah mencoba mengambil gambar Bahkan setelah Anda memperbaiki masalah dengan gambar Anda dengan mengunggah gambar yang hilang dan mengatur izin untuk gambar yang dilindungi. Mengapa? Membersihkan cache browser Anda tidak berdampak. GoogleImageProxy tidak akan pernah mengambil gambar baru bahkan untuk email baru Anda karena gambar sekarang di-cache ke GoogleImageProxy bersama dengan kode status terakhir mereka dan tidak di-cache di browser Anda sendiri. 

GoogleImageProxy telah menetapkan tanggal kedaluwarsanya sendiri untuk gambar. 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 yang bisa menjadi solusinya?

SOLUSINYA

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

  • Ubah nama gambar Anda menjadi sesuatu yang lain dengan ekstensi png, jpg, atau gif Saja.
  • Jangan gunakan jenis 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 Anda yang dilindungi maka respons Anda harus menyertakan tajuk yang tepat seperti Content-Type: image/jpeg
  • Ekstensi file dan header tipe konten harus cocok
  • Kode status harus 200 bukannya 403, 500 dll

CATATAN PENTING

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

Semoga ini akan memperbaiki masalah bagi sebagian besar orang.

51

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 itu memecahkan masalah.

Solusi lain yang mungkin:

25
JSuar

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 pengujian dengan ukuran URL yang berbeda, dan menemukan gambar yang di-cache akan gagal memuat secara konsisten (400/Permintaan Tidak Valid) jika panjang hash melebihi 2076 karakter (mendekati 2048 bytes + 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 2076 karakter, permintaan gagal.

Saya menyadari ini adalah posting lama, tapi mudah-mudahan ini membantu para devs lain menjelajahi Google

6
Mahdi.Montgomery

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 memblokirGOOGLEIMAGEPROXYmemberikan 403 Forbidden / reply. Saya memutuskan untuk memeriksa .htaccess saya dan cukup yakin saya memblokir istilahPROXY. Setelah menghapus istilah tersebut, gambar muncul dengan baik sekarang di Gmail. Semoga itu bisa membantu.

5
Manish Pradhan

Saya baru saja mencoba, Setelah mengganti gambar (tanpa mengubah nama gambar)

  • Buka email di browser baru, ini menunjukkan gambar baru 

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

3
safin chacko

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

2
DDS

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

Periksa ukuran file dan jika terlalu besar, kompreslah.

1
vishes_shell

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

Anda dapat memeriksa ini menggunakan Fiddler.

1
Softlion

Pastikan bahwa Gmail meminta gambar Anda melalui 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 memiliki perasaan yang kuat bahwa proksi Google tidak menyimpan https.

0
Pedro Vagner
0
Naved Khan

Saya punya solusi sempurna untuk masalah ini, yang bekerja 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 path absolut gambar dan memberinya nama panggilan 'logoimg' atau apa pun yang Anda inginkan.

Sekarang Anda dapat menambahkan logoimg ini ke mana saja di Badan 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. 

0
Arjun Choudhary