郵件閱讀追蹤(Open Tracking)常見做法是在 HTML 郵件內嵌一張 1x1 像素的透明圖片(Tracking Pixel),圖片 src 指向一支 PHP 腳本。收件者開啟郵件時,郵件客戶端會請求該圖片,伺服器即可記錄時間、IP、User-Agent 等資訊,再回傳圖片。
track.php<?php
// 關閉錯誤輸出,避免干擾圖片標頭
error_reporting(0);
// 回傳 1x1 透明 JPEG
header('Content-Type: image/jpeg');
// 取得客戶端真實 IP
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
// 時間資訊
$actual_time = time();
$actual_day = date('Y.m.d', $actual_time);
$actual_hour = date('H:i:s', $actual_time);
// 瀏覽器/郵件客戶端資訊
$browser = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown';
// 寫入日誌(生產環境建議改用資料庫、加鎖或非同步隊列)
$logFile = __DIR__ . '/email_open_log.txt';
$fh = fopen($logFile, 'a+');
$logLine = "{$actual_day} {$actual_hour} {$ip} {$browser}\n";
fwrite($fh, $logLine);
fclose($fh);
// 產生 1x1 白色 JPEG
$img = imagecreate(1, 1);
$white = imagecolorallocate($img, 255, 255, 255);
imagejpeg($img);
imagedestroy($img);
<img src="https://yourdomain.com/track.php?uid=123&campaign=summer_sale" width="1" height="1" alt="" />
Referer 判斷郵件客戶端類型(Gmail、Outlook、Apple Mail 等)。