質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

2673閲覧

PHP GメールへのWEBビーコンを使ったメール送信

chiri212

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2020/01/12 05:33

前提・実現したいこと

メールの送信システムを作成しており、「誰がどのメールを開封しているか」の情報を取得するための開封確認機能を実装中です。
調べたところ、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ファイルが機能するようなメールの送信方法など、何かヒントになることがあればご教示いただけますと幸いです。

質問自体にも不慣れで至らない点があるかと思いますが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

画像ファイルをlocalhostではなくどこからでも参照できる場所に用意すればいいだけの話では無いですか?

投稿2020/01/12 07:14

編集2020/01/12 07:16
scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chiri212

2020/01/12 07:57

回答ありがとうございます。画像ファイルの「1px.php」をWEB上にUPして試しましたが、変わりませんでした。。
scsi

2020/01/12 09:36

なるほど、後で試してみます
退会済みユーザー

退会済みユーザー

2020/01/12 10:01

ホワイトリストにいれないとGメールじゃ有効なドメインでもみれないよ
scsi

2020/01/12 10:26

おお、そうなんですね!
chiri212

2020/01/12 11:28

システム自体をローカルから本番環境に移行して実行してみたところ、画像は変わらず表示されなかったものの、1px.phpファイルは読み込まれたようで、開封確認が作動しました! 画像の表示については、下記等を参考に受信側での設定を試みましたが、状況変わっておりません。。 https://boxil.jp/mag/a1661/#1661-12
guest

0

自己解決

自己解決しました。
Gメールのプロキシを通る際に、画像パス内のGETパラメータ用記号「?」が認識されず404エラーを起こしていたことが原因でした。
https://www.code-adviser.com/detail_38226003
上記を参考に、1px.php?id=117 → 1px.php/id=117のように書き換えた上で、$_GETの代わりに$_SERVER['REQUEST_URI']を使ってパスを取得・加工することで目的通りWBEビーコンによる開封確認を行うことができました。
回答いただいた皆さま、ありがとうございました。

投稿2020/01/16 16:52

chiri212

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問