web-dev-qa-db-ja.com

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には何もありません。

Email showing image errors

そのため、Googleが作成しているリンクに何か問題があるか、画像がgoogleusercontentサーバーにアップロードされていないだけですが、問題を解決する方法がわかりません。

私はPHP、 phpmailerライブラリ 、およびAmazon EC2上のUbuntuサーバーを使用していますが、それが問題に関連しているかどうかはわかりません。

85
JackalopeZero

GoogleImageProxyの問題を見つけたと思います。

これは、キャッシュの概念に関連するものです。サーバーに最近phpコードをデプロイしたが、画像をアップロードするのを忘れたとします。メールロジックで1回テストしました。システムがHTMLメールを生成しました。このメールがGmailサーバーに到達すると、GoogleImageProxyはサイトから画像を取得して独自のプロキシサーバーに保存しようとします。 GoogleImageProxyは、画像の取得中に、欠落している画像に対して404ステータスを、保護された画像に対して403ステータスを検出しました。 GoogleImagesProxyは、これらのステータスを独自のプロキシサーバーに保存しました。

メールを開こうとすると、画像に対して404ステータスが表示されます。これは理解できることです。画像をアップロードするのを忘れたことにすぐに気付いたので、サーバーにアップロードしました。また、保護されたイメージに対するいくつかの権限を修正しました。

これで完了です。ここで、もう一度php-emailスクリプトを実行してみます。その結果、GmailまたはHotmailの受信トレイに別のメールが届きます。画像に関するすべての問題を修正しました。これで、画像をメールコンテンツに表示する必要があります。しかし、あなたはまだ画像を見ることができません。

ああ、ブラウザのキャッシュをクリアするのを忘れた可能性があります。ブラウザのキャッシュをクリアして、GmailまたはHotmailページをもう一度ロードします。しかし、結果は同じままです。数十の修正/パッチを適用し、php-emailスクリプトを数千回実行してみてください。しかし、結果は同じままです。改善なし。

実際の問​​題

一体何が起こっているの?それをあなたに説明させてください。アクセスログにアクセスして、GoogleImageProxyからのリクエストを見つけてください。メールで使用されているさまざまな画像の数に応じて、GoogleImageProxyからのリクエストが2つまたは3つしかないことに驚かれることでしょう。 GoogleImageProxyは画像を取得しようとしませんでした。画像のアップロードや保護された画像のアクセス許可の設定によって画像の問題を修正した後でも。どうして?ブラウザのキャッシュをクリアしても影響はありません。 GoogleImageProxyは、最新のメールでも最新の画像を取得しません。これは、画像が最新のステータスコードとともにGoogleImageProxyにキャッシュされ、ブラウザにキャッシュされないためです。

GoogleImageProxyは、画像の有効期限を独自に設定しています。一ヶ月だと思います。そのため、有効期限後に画像の新しいコピーが取得されます。つまり、1か月後です。 GoogleImageProxyに画像を取得させることはできません。ただし、メールに画像を表示することは重要です。解決策は何ですか?

ソリューション

GoogleImageProxyに画像を強制的に取得させる唯一の方法は次のとおりです

  • 画像の名前を変更するには、拡張子をpng、jpg、またはgifのみにします。
  • ?t=34343のような画像のURLでクエリ文字列を使用しないでください
  • 画像には、拡張子としてpng、jpgまたはgifを含める必要があります。
  • 画像のURLは画像に直接マッピングする必要があります。
  • 保護された画像にプロキシURLを使用する必要がある場合、応答にはContent-Type: image/jpegなどの適切なヘッダーを含める必要があります
  • ファイル拡張子とコンテンツタイプヘッダーは一致する必要があります
  • ステータスコードは、403、500などではなく200でなければなりません

重要な注意

Php-emailスクリプトを実行するたびにプロセス全体を繰り返すようにしてください。 GoogleImageProxyが画像をキャッシュするたびに、新しい試行ごとに同じプロセスを繰り返す必要があるためです。

うまくいけば、ほとんどの人にとってこの問題が解決することでしょう。

68

例に基づいて、従来の拡張子(.jpg、.png、.gif)を使用しているようです。 このスレッドの一部の人々 は、あなたが直面しているのと同じ問題を説明し、これらの拡張機能を使用することで問題を解決できると述べています。

他の可能な解決策:

26
JSuar

同様の問題が発生していましたが、URLの長さが原因でした。 Googleは、Gmailから画像をキャッシュするときに次のURLを生成します。

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

生成されるハッシュは画像のURLに基​​づいていますが、サイズは使用する文字に応じて異なります。サイズの異なるURLで複数のテストを実行しましたが、hashの長さが2076文字(2048バイト+メタに近い? )。

繰り返しになりますが、画像URLは、この多くの文字を超えるハッシュを生成し、最大で1000個の特殊文字、または1500個以上の単純な文字を生成できます。ハッシュの長さが2076文字を超える場合、要求は失敗します。

これは古い投稿であることに気付きましたが、他の開発者がGoogleを探し回るのに役立つことを願っています

7

これは古い質問ですが、同じことが私にも起こりました。私がアクセスログを確認したとき、これは私が見つけたものです-

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で画像が正常に表示されるようになります。お役に立てば幸いです。

6
Manish Pradhan

HTTPSイメージの場所はキャッシュします。運用環境のいくつかでは、GmailがHTTPS URIを使用して画像の場所をプロキシすることに問題はありません。 SSL証明書が何らかの方法で無効な場合、Gmailがコンテンツを無視することがあります。

3
DDS

(画像名を変更せずに)画像を置き換えた後、試しました

  • 新しいブラウザでメールを開き、新しい画像を表示します

  • chrome(デフォルトのブラウザ)でCtrl + f5(キャッシュの更新を強制)、新しい画像も表示

3
safin chacko

私の場合、ファイルのサイズが問題でした。22Mb(私は知っていますか?)でした。サイズを小さくすると、すべてが魅力的に動作し始めました。

ファイルサイズの確認そして、大きすぎる場合は圧縮します。

1
vishes_shell

サーバーから返された画像ファイルのコンテンツタイプが正しいことを確認してください。

これはFiddlerを使用して確認できます。

1
Softlion

Gmailがhttpではなくhttpsを介して画像をリクエストしていることを確認してください。

あなたの通常の画像のURLは次のとおりだとしましょう:

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

に変更:

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

Googleのプロキシがhttpsをキャッシュしないと強く感じています。

0
Pedro Vagner
0
Naved Khan

Gifを送信していたときにこの問題が発生しました。 Googles Proxyサーバーにとってファイルサイズが重要であることがわかりました。ファイルをできるだけ小さくし、それが機能するかどうかを確認することをお勧めします。 Gmailアカウントを使用して、URLから写真を追加してテストできます。メールの作成中にgifが表示された場合、受信可能です。

幸せなコーディング。

0

私はこの問題の完璧な解決策を持っています。PHPMailerを使用している場合はうまくいきましたが、このような画像を添付するためにPHPMailerに別のオプションを追加するだけです

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

ここでは、イメージの絶対パスを指定し、「logoimg」または任意の名前を付けて名前を付けています。

これで、このlogoimgをHTML Bodyのどこにでもこのように追加できます

$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
Arjun Choudhary