Gmailの新しい画像キャッシュがニュースレターの画像リンクを壊している


104

サイトのサインアップ完了時に送信される自動メールがいくつかあります。

最近まで、彼らはうまく働きました。現在、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サーバーを使用していますが、それが問題に関連しているのかわかりません。


サーバーまたはイメージを提供するロジックにセキュリティ機能はありますか?期間限定で利用できますか、それともこのような機能ですか?
Pixou 2014年

画像を表示するためのセキュリティ機能やログインシステムはありません。画像はシステムのパブリックフォルダにあります。元のリンクにアクセスすると、画像が表示されます。問題は、GoogleによるURLの書き換えが画像をサーバーにアップロードしていないか、ユーザーをサイトに正しく誘導していないことです。
RonnyKnoxville 2014年

1
ブログと投稿のレビュー後、このランダムな問題の実際の回避策は見つかりませんでした(2013年3月)。間違ってる?
kheraud 2014年

4
これは私を完全に狂気にさせています。グーグルはメールを壊しました。私はGoogleフォーラムのいくつかの関連スレッドでアクティブになっていて、牽引力を得ることができません。これは2013
ネイサンビーチ

これはどこに行ったことがありますか?髪を抜いています。画像は一般公開されており、直接アクセスすると正常に読み込まれ、コンテンツタイプが一致し、Googleのプロキシサーバーはログで200 OKしか取得しません。画像がGmailに表示されない理由がわかりません。
Matt Brunmeier、2015年

回答:


83

私はGoogleImageProxyの問題を理解したと思います。

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

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

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

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

実際の問題

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

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

ソリューション

以下は、GoogleImageProxyに画像をフェッチさせる唯一の方法です。

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

重要な注意点

php-emailスクリプトを実行するたびに、プロセス全体を繰り返します。なぜなら、GoogleImageProxyが画像をキャッシュするたびに、毎回同じプロセスを繰り返す必要があるからです。

うまくいけば、これでほとんどの人の問題が解決します。


9
tl; dr:おそらく.svgを使用し、代わりに.png .jpgまたは.gifを使用します
taylorstine

2
そう、svgは使用しないでください;)
Alexandre Martini

1
ファイル名にスペースが含まれている画像がAzure Blob Storageから提供されていました。画像がGmailで正しく表示されません。ファイル名のスペースを削除すると、問題が修正されました。
2018年

1
@AlexandreMartiniなぜSVGを使わないのですか?ロゴはSVGで最高ですよね?
trainoasis

1
画像パスをURLエンコードしていることを確認してください。パスにスペースがありましたが、ブラウザーはそれを%20に置き換えますが、Gmailキャッシュはそれを行わず、リンク切れと見なします。
Chad Richardson

29

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

その他の可能な解決策:


1
これらは私がこの問題を自分で調査したときに見つけた多くの情報源ですが、残念ながらそれらのどれも私が探している答えを私に与えません。私はまだ答えを見つけることができる前にグーグルがこの問題を解決することを望んでいます
RonnyKnoxville

@JackalopeZeroは、この問題をニュースレターの外で独自に再現しようとしましたか?私は個人用および会社用のGmailで試してみましたが、結果は良好でした。それが問題であることはわかっていますが、画像を使用して新しいメールを作成すると、発生している問題に光が当たる可能性があります。
JSuar 2014年

4
拡張機能のヒントをありがとう。私は.svg画像を使用していましたが、Googleのプロキシでサポートされていないことが確認されています。
Nick Merrill、2014年

1
今日私はこれに遭遇しました。私にとって、Googleのプロキシは1x1トランスペアレントに対して500エラーをスローしていましたpixel.gif。これを1x1トランスペアレントに変更するpixel.pngと、プロキシは期待どおりに機能しました。変だ。
ディーフォー2014年

8

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

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

生成されるハッシュは画像のURLに基​​づいていますが、サイズは使用する文字によって異なります。さまざまなサイズのURLを使用していくつかのテストを実行しましたが、キャッシュされた画像が一貫してロードされない(400 /無効なリクエスト)場合、ハッシュがが2076文字(2048バイトに近い+メタ?

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

私はこれが古い投稿であることを理解していますが、うまくいけば、これは他の開発者がGoogleを精査するのに役立ちます


6

これは古い質問であることは知っていますが、同じことが起こりました。アクセスログを確認したところ、これが見つかりました-

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で正常に表示されます。お役に立てば幸いです。


私は403も持っていました。mod_securityがGoogleプロキシをブロックしていることを理解しました...
Peter

2
これはまさに私が抱えていた問題でした。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

HTTPS画像の場所はキャッシュします。一部の本番環境では、HTTPS URIを使用して画像の場所をプロキシするGmailに問題はありません。SSL証明書が何らかの理由で無効である場合、Gmailがコンテンツを無視するのを見ることができます。


更新していただきありがとうございます。少し前のことですが、この答えの解決策は見つかりませんでした
RonnyKnoxville '21

画像が含まれ、httpsプロトコルでhtmlメールを作成しようとした現在の経験にもよりますが、証明書に依存していることを確認しました。組織化されていない暗号化を使用すると、画像がGmailでブロックされます。組織が含まれているブランドの証明書を使用しているときに、画像が表示されます。だから私はそれが無料かブランドの証明書かそれで宣言された組織のどちらかだと思います。
Tritof、2018

3

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

  • 新しいブラウザでメールを開くと、新しい画像が表示されます

  • クロム(私のデフォルトのブラウザ)でCtrl + F5(キャッシュを強制的に更新)、新しい画像も表示


1

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

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


1

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

ファイルサイズ確認し、大きすぎる場合は圧縮してください。


ナイスキャッチ。Gmailのエラーメッセージは、入力ミスまたは権限エラーのように思われ、非常に誤解を招くものでした。
ルミネア2018

1

これは古い質問であることはわかっていますが、この問題は解決しました。私の場合、画像はGoogle Cloud Storageに保存されています。興味深いのはそのリンクです

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

307(一時的なリダイレクト)とLocation次のような内容を含むヘッダーを返します

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

GoogleImageProxyが307を正しく処理しないようです


これは本当です。バックエンドをバケットとしてロードバランサーとCDNを設定する必要がありました。これで、画像がクラウドストレージで正しく機能します
Wendel Nascimento

0

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

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

ここでは、イメージの絶対パスを指定し、「logoimg」などの名前を付けます。

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

$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

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

幸せなコーディング。


0
  1. Outook / hotmailから機能していますか?その後、Googleの問題として特定できるはずです。あなたの場合はそうではありません。
  2. 画像のサイズが問題になる場合があります。それを減らしてみてください
  3. www.mysite.comこのサイトはシステムからアクセスできる場合があります。しかし、Googleサーバーからもアクセスできますか?
  4. 拡張機能を変更してみてください。これはトリックです。いくつかのことを試みた可能性がありますが、キャッシュからフェッチします(これにより作業が無効になります)。それはうまくいき、トリックをしたのは「拡張機能」だと思うかもしれません!! (拡張機能について話す人の多くと同様)

0

この問題が発生した場合、問題は、誤ってメールテンプレートの画像へのパスのURLに3つのスラッシュが含まれていることhttps:///content.example.org/image.pngでした。これを特定するのは困難でした。また、URLを正常に解決できる他のメールクライアントで機能していましたが、Googleの画像プロキシはそれを処理できず、プロキシされた画像アドレスに対して404が発生しました。


-1

Gmailが画像をリクエストするのでhttpはなく、https

通常の画像のURLは次のようになります。

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

したがって、次のように変更します。

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

私はグーグルのプロキシがキャッシュしないと強く感じていhttpsます。


良い点、サイトは間違いなくhttpsを使用しているため、それが原因である可能性があります
RonnyKnoxville 14

19
「私はグーグルのプロキシがhttpsをキャッシュしないと強く感じています。」-あなたの気持ちは間違っている
ウィル

1
これはうまくいった!プロトコルが機能するように、httpを使用して、外部画像を含むGoogleスプレッドシートのセルをコピーしてメールに貼り付けようとしました。
2016

これは間違っています、なぜGoogleはhttps経由で画像をキャッシュできないのでしょうか?
southpaw93

Googleはhttpsに対する訴訟について何も言及していないため、強い感情は無駄になっています
Blue Clouds

-7

それは3月6日で、おそらくすでにこれを理解しているでしょうが、私は他の人を助けるためにチャイムを鳴らしたいと思っていました。JPGがGmailで機能しないことを発見しました。PNG形式はうまく機能します。申し訳ありませんが理由は説明できませんが、理由を尋ねない方がよい場合もあります。PNGを使用してください!


グーグルがその解決策を実際に検討するとは信じられない。とにかく、私たちのニュースレターはGmailユーザーのために大破されているので、試してみるつもりです。
Nathan Beach

これは真実ではなく、Gmailはjpegsをサポートしています
Will

これはjpgをサポートしています
managerger '15

Lはpngを使用して同じ問題を取得します。
Eduardo Nobre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.