首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實作郵件閱讀追蹤:隱形圖片記錄開啟時間、IP 與瀏覽器資訊

     編輯:PHP 相關知識

原理簡介

郵件閱讀追蹤(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="" />
  • 可在 query string 帶入用戶 ID、活動代碼等,方便後續分析。
  • 圖片尺寸設為 1x1 且無 alt 文字,對版面零影響。

安全與隱私提醒

  • GDPR/個資法:蒐集 IP 與 User-Agent 屬個人資料,需於隱私權政策揭露並取得同意。
  • 防刷:同一郵件可能被預覽、轉發多次觸發,建議在日誌加入唯一 token 去重。
  • 圖片封鎖:部分郵件客戶端預設封鎖外部圖片,追蹤會失效,屬正常現象。
  • 效能:高流量時檔案寫入會成為瓶頸,建議改寫入 Redis/MySQL 或使用非同步日誌庫(Monolog + handler)。

進階擴充

  • 記錄 Referer 判斷郵件客戶端類型(Gmail、Outlook、Apple Mail 等)。
  • 結合 GeoIP 解析地理位置。
  • 儲存至資料表並建立儀表板統計開信率、重複開啟次數、時段分布。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved