前提・実現したいこと
メールの送信システムを作成しており、「誰がどのメールを開封しているか」の情報を取得するための開封確認機能を実装中です。
調べたところ、1×1pxの透過画像をメールに埋め込む「WEBビーコン」を使うのが有効と知り、送信先ユーザと送信メールを識別するIDをWEBビーコンに付与することで上記機能を実装しようとしています。
「どこまで正確に情報を取るか」の明確な指標はありませんが、メジャーなメールサーバには出来るだけ対応させたいと考えています。
発生している問題
GmailとyahooのメールアドレスへWEBビーコンを含むHTMLメールを送信して動作確認をしたところ、yahooでは正常に動くものの、Gmailでは下記のように画像が正しく表示されず、WEBビーコンが機能していないようです。
↓yahooメールで正常に受信できたメール画面
見た目ではわかりませんが、1×1pxの画像が文末に挿入されています。
↓yahooメールで受信したメールの画像部分(開発ツールから確認)
html
1<img src="http://localhost:8888/mail_service/1px.php?id=118">
↓Gメールで受信したメール画面
※画像が読み込まれておらず、変なアイコンが出てしまっている
↓Gメールで受信したメールの画像部分(開発ツールから確認)
html
1<img src="https://ci3.googleusercontent.com/proxy/MfuTW36gDfnGUs4uRTVsC_y6L19-WSZSjEXPSg9KcH7eaBxrcr7W7_WZ-ua6LnLjJ_ch6sgE_zZwbsaexyXaEazVz-g=s0-d-e1-ft#http://localhost:8888/mail_service/1px.php?id=117" class="CToWUd">
なお、imgタグの中で指定している1px.phpファイルの内容は以下の通りです。
php
1<?php 2 3//関数読み込み 4require('function/function.php'); 5 6//デバッグログ 7debug('開封確認ファイルにアクセスあり'.$_GET['id']); 8 9//GIFに見せかける 10header('Content-Type: image/gif'); 11 12// キャッシュ対策 13header('Expires: Thu, 01 Jan 1970 00:00:00 GMT'); 14header('Cache-Control:private, no-cache, no-cache=Set-Cookie, must-revalidate'); 15header('Pragma: no-cache'); 16 17//1×1pxの透過gif画像をbase64形式で返す 18echo base64_decode('R0lGODlhAQABAGAAACH5BAEKAP8ALAAAAAABAAEAAAgEAP8FBAA7'); 19 20//DBで開封フラグを立てる 21setMailOpen($_GET['id']); 22 23?> 24
試したこと
Gメールの受信画面にて開発ツールを使い、
src属性を "http://localhost:8888/mail_service/1px.php?id=117" に書き換えたところ、正常にリンクが読み込まれました。このため、Gメールのプロキシで弾かれてしまっていることが原因の1つだと考えています。
質問
グーグルで調べても上記の問題をクリアする方法が見当たらず、詰まっています。
原因として考えられることや、Gメールのプロキシを経由した上で1px.phpファイルが機能するようなメールの送信方法など、何かヒントになることがあればご教示いただけますと幸いです。
質問自体にも不慣れで至らない点があるかと思いますが、よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/12 07:57
2020/01/12 09:36
退会済みユーザー
2020/01/12 10:01
2020/01/12 10:26
2020/01/12 10:42
2020/01/12 11:28