本文介绍如何通过 PHP 的 $_SERVER['HTTP_USER_AGENT'] 安全获取用户访问时的浏览器类型、操作系统及设备特征,并将其整合进 PHPMailer 邮件内容中,无需额外前端埋点或 JavaScript 介入。
本文介绍如何通过 php 的 `$_server['http_user_agent']` 安全获取用户访问时的浏览器类型、操作系统及设备特征,并将其整合进 phpmailer 邮件内容中,无需额外前端埋点或 javascript 介入。
在使用 PHPMailer 处理表单提交时,许多开发者希望在收到的邮件中自动附带用户环境信息(如 Chrome on Windows、Safari on iPhone、Firefox on Linux 等),以便辅助分析用户行为或排查兼容性问题。这类信息无需依赖前端 JS,PHP 服务端即可直接获取——关键在于利用 $_SERVER 超全局数组中的 HTTP_USER_AGENT 字段。
$_SERVER['HTTP_USER_AGENT'] 是由客户端浏览器主动随 HTTP 请求头发送的字符串,通常包含浏览器名称、版本、渲染引擎、操作系统甚至设备类型(如 Mobile、Tablet 标识)。例如:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
你可以在处理表单提交的 PHP 脚本中,于调用 PHPMailer 发送邮件前提取并解析该字段。推荐做法如下:
✅ 基础获取(直接附加到邮件正文):
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown User Agent'; $message .= "\n\n--- 用户环境信息 ---\n"; $message .= "User-Agent: " . htmlspecialchars($userAgent) . "\n";
✅ 增强解析(识别常见设备与浏览器):
虽然 get_browser() 函数可提供结构化解析,但需服务器启用 browscap.ini,配置较复杂且存在性能开销。更轻量、可靠的做法是使用正则简易判断:
function parseUserAgent($ua) {
$data = ['browser' => 'Unknown', 'os' => 'Unknown', 'device' => 'Desktop'];
// 检测移动设备
if (preg_match('/(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i', $ua)) {
$data['device'] = 'Mobile';
} elseif (preg_match('/(Tablet|iPad)/i', $ua)) {
$data['device'] = 'Tablet';
}
// 检测操作系统
if (preg_match('/Windows/i', $ua)) $data['os'] = 'Windows';
elseif (preg_match('/Mac OS X/i', $ua)) $data['os'] = 'macOS';
elseif (preg_match('/Linux/i', $ua)) $data['os'] = 'Linux';
elseif (preg_match('/Android/i', $ua)) $data['os'] = 'Android';
elseif (preg_match('/iOS|iPhone|iPad|iPod/i', $ua)) $data['os'] = 'iOS';
// 检测浏览器
if (preg_match('/Edg\/([0-9.]+)/i', $ua, $matches)) $data['browser'] = 'Edge ' . $matches[1];
elseif (preg_match('/Chrome\/([0-9.]+)/i', $ua, $matches)) $data['browser'] = 'Chrome ' . $matches[1];
elseif (preg_match('/Firefox\/([0-9.]+)/i', $ua, $matches)) $data['browser'] = 'Firefox ' . $matches[1];
elseif (preg_match('/Safari\/([0-9.]+)/i', $ua, $matches) && !preg_match('/Chrome|Edg/i', $ua))
$data['browser'] = 'Safari ' . $matches[1];
elseif (preg_match('/MSIE|Trident/i', $ua)) $data['browser'] = 'Internet Explorer';
return $data;
}
$uaInfo = parseUserAgent($_SERVER['HTTP_USER_AGENT'] ?? '');
$message .= "\n\n--- 用户环境详情 ---\n";
$message .= "设备类型: {$uaInfo['device']}\n";
$message .= "操作系统: {$uaInfo['os']}\n";
$message .= "浏览器: {$uaInfo['browser']}\n";
⚠️ 重要注意事项:
- $_SERVER['HTTP_USER_AGENT'] 可被客户端伪造,不可用于安全校验或权限控制,仅适用于统计与调试场景;
- 始终对 $userAgent 执行 htmlspecialchars() 再写入 HTML 邮件,防止 XSS(若邮件为 HTML 格式);
- 某些隐私模式或浏览器扩展可能屏蔽或简化 UA 字符串,导致识别不准确;
- 不要依赖 get_browser() 函数生产环境部署,除非已明确配置 browscap.ini 并定期更新。
最后,在 PHPMailer 实例中将上述 $message 作为邮件正文发送即可:
use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer(true); $mail->isSMTP(); // ... 其他配置 $mail->Body = $message; // 已含 UA 解析信息 $mail->send();
通过这种方式,你无需修改前端表单,即可在每封来自 PHPMailer 的通知邮件中,稳定、高效地附带有价值的终端环境上下文。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











