1. ホーム
  2. image

[解決済み] Gmailの新しい画像キャッシュ機能で、メルマガの画像リンクが壊れる件

2022-07-30 01:25:16

質問

私のサイトでは、サインアップ完了時に送信されるいくつかの自動配信メールを用意しています。

最近まで、それらは問題なく動作していました。現在 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サーバーにアップロードされていないだけなのですが、どうすれば解決できるのか見当もつきません。

私はPHPを使用しています。 phpmailer ライブラリ とAmazon EC2上のUbuntuサーバを使用していますが、Imはそれが問題に関連していることを確認していません。

どのように解決するのですか?

GoogleImageProxyの問題がわかったような気がします。

これは CACHING コンセプトに関連するものです。最近、サーバーに php コードをデプロイしましたが、画像をアップロードするのを忘れていたとします。このメールがGmailサーバーに届くと、GoogleImageProxyはあなたのサイトからプロキシサーバーに画像を取得して保存しようとします。画像を取得する際に、GoogleImageProxyは、見つからない画像に対しては404、保護された画像に対しては403のステータスを発見しました。GoogleImagesProxyは、これらのステータスを独自のプロキシサーバーに格納されています。

今、メールを開こうとしたら、画像に対して 404 ステータスがあることに気づきました。これは理解できることです。あなたはすぐに、いくつかの画像をアップロードするのを忘れていたことに気づいたので、それらをサーバーにアップロードし、また、保護された画像に対するいくつかのパーミッションを修正しました。

これですべて完了です。ここで、もう一度php-emailスクリプトを実行してみます。その結果、Gmail または Hotmail の受信トレイに別の電子メールが届きました。これで画像はメールコンテンツに表示されるはずですが、まだ画像が表示されていません。

あ、もしかしたらブラウザのキャッシュをクリアし忘れているのかもしれません。ブラウザのキャッシュをクリアして、Gmail や Hotmail のページをもう一度読み込んでみてください。しかし、結果はまだ同じでしょう。何十もの修正/パッチを適用し、php-emailスクリプトを何千回も動かしてみてください。しかし、結果は同じです。改善されません。

本当の問題

いったい何が起こっているのでしょうか?説明しましょう。アクセスログを見て、GoogleImageProxyからのリクエストを探し出してみてください。メールに使われているさまざまな画像の数にもよりますが、GoogleImageProxyからのリクエストは2~3回しかないことに驚かれることでしょう。GoogleImageProxyが画像を取得しようとしない 不足している画像をアップロードしたり、保護された画像にアクセス許可を設定したりして、画像の問題を解決した後でも、GoogleImageProxyは画像を取得しようとしません。なぜでしょうか?ブラウザのキャッシュをクリアしても、何の影響もありません。GoogleImageProxy は、新しいメールに対しても新しい画像を取得することはありません。これは、画像が最後のステータス コードとともに GoogleImageProxy にキャッシュされ、ブラウザにキャッシュされないためです。

GoogleImageProxyは、画像に独自の有効期限を設定しています。そのため、有効期限を過ぎると新しい画像が取得されるようになります。私は1ヶ月後を意味します。GoogleImageProxyに強制的に画像を取得させることはできません。しかし、それはあなたの電子メールに画像を表示するために重要です。何が解決策になることができますか?

解決策

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

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

重要な注意事項

php-emailスクリプトを実行するたびに、すべてのプロセスを繰り返すようにしてください。なぜなら、毎回GoogleImageProxyが画像をキャッシュしてしまい、新しく試すたびに同じプロセスを繰り返さなければならないからです。

これでほとんどの人が問題を解決できることを期待しています。