在 HTML 郵件中嵌入 <img src="track.php?uid=xxx" width="1" height="1">。收件者開信載入圖片時,伺服器記錄請求資訊(IP、時間、User-Agent),再回傳 1x1 透明圖片,達到靜默追蹤效果。
<?php
// 關閉錯誤輸出,避免破壞圖片資料流
error_reporting(0);
// 回傳 JPEG 標頭
header('Content-Type: image/jpeg');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
// 1. 取得真實 IP(考慮代理)
$ip = $_SERVER['HTTP_CLIENT_IP']
?? $_SERVER['HTTP_X_FORWARDED_FOR']
?? $_SERVER['REMOTE_ADDR']
?? 'unknown';
// 2. 時間資訊
$time = time();
$date = date('Y-m-d H:i:s', $time);
// 3. 瀏覽器/郵件客戶端資訊
$ua = $_SERVER['HTTP_USER_AGENT'] ?? 'unknown';
// 4. 可選:識別收件者(從查詢字串取得)
$uid = $_GET['uid'] ?? 'anonymous';
// 5. 寫入日誌(生產環境建議用資料庫/Redis/日誌服務)
$logLine = sprintf(
"[%s] uid=%s ip=%s ua=%s\n",
$date, $uid, $ip, $ua
);
file_put_contents(__DIR__ . '/email_track.log', $logLine, FILE_APPEND | LOCK_EX);
// 6. 產生 1x1 透明 JPEG
$img = imagecreate(1, 1);
$white = imagecolorallocate($img, 255, 255, 255);
imagejpeg($img);
imagedestroy($img);
?>
<html>
<body>
<h1>親愛的用戶,您好</h1>
<p>這是測試郵件內容...</p>
<!-- 追蹤像素:uid 為收件者唯一識別 -->
<img src="https://yourdomain.com/track.php?uid=user123" width="1" height="1" alt="" style="display:none" />
</body>
</html>
| 功能 | 實作方式 |
|---|---|
| 唯一追蹤 ID | 發信時產生 UUID,關聯收件者資料庫,track.php 解析 uid 更新閱讀狀態 |
| 地理位置 | IP 對應 GeoIP2 資料庫或 API(如 ipapi.co)解析國家/城市 |
| 裝置類型 | 解析 User-Agent(Mobile/Desktop/Webmail),使用 ua-parser 庫 |
| 開信時間統計 | 資料庫記錄 first_open_at, last_open_at, open_count |
| 連結點擊追蹤 | 郵件連結導向 redirect.php?url=...&uid=... 記錄後 302 跳轉 |
| 防重複計數 | 同一 uid + IP + UA 在短時間內去重 |
1x1 圖片信標是經典郵件追蹤技術,實作簡單但受限於客戶端阻擋、代理 IP、隱私法規。生產系統建議直接使用成熟郵件服務商 API,獲得更準確、合規的追蹤數據。