[解決済み] 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には何もありません。
ということで、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が画像をキャッシュしてしまい、新しく試すたびに同じプロセスを繰り返さなければならないからです。
これでほとんどの人が問題を解決できることを期待しています。
関連
-
[解決済み] 8bit PNGと32bit PNGの違い?
-
[解決済み] サブフィギュアの垂直アライメント LATEX
-
[解決済み] Goで生成されたアニメーションGIFがウィンドウズで動かない
-
[解決済み] 画像比較 - 高速アルゴリズム
-
[解決済み] イメージからDockerfileを生成するには?
-
[解決済み】CSS3 回転アニメーション
-
[解決済み】Base64でエンコードされた画像をディスクに保存するには?
-
[解決済み] OpenCVで画像の類似性をチェックする
-
[解決済み] knitr for markdownを使用してローカルイメージのサイズを設定する方法は?
-
[解決済み] htmlメールに画像を埋め込む
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Goで生成されたアニメーションGIFがウィンドウズで動かない
-
[解決済み] kubernetesでデプロイメント/イメージを削除する方法
-
[解決済み] アニメーションGIFの代替品にはどんなものがありますか?[クローズド]
-
[解決済み] イメージからDockerfileを生成するには?
-
[解決済み】Kubernetesにイメージの再引き取りを強制する方法は?
-
[解決済み】ImageMagickを使って画像を "Diff "する。
-
[解決済み] HTML5 アップロード前に画像をプリリサイズする
-
[解決済み] Facebookでプレビューとして表示されるWebサイトの画像を設定するにはどうすればよいですか?
-
[解決済み】FFmpegで画像から動画を作成する方法は?
-
[解決済み] データURLからキャンバスへの画像描画