如何在PHPMailer发送的联系邮件中获取并添加用户IP地址?
在PHPMailer邮件中添加用户IP地址
很容易实现这个需求,只需要两步:获取用户的IP地址,然后把它插入到邮件的内容里即可。
1. 获取用户IP地址
用户的IP地址可以通过$_SERVER超全局变量获取,不过为了兼容代理服务器的情况,建议用下面的逻辑来获取最准确的IP:
// 获取用户真实IP地址 $userIp = $_SERVER['REMOTE_ADDR']; // 处理代理场景下的IP获取 if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $userIp = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $userIp = $_SERVER['HTTP_CLIENT_IP']; }
2. 修改邮件内容,插入IP地址
把上面获取到的$userIp变量添加到MsgHTML的内容里,比如新增一行专门显示IP地址。
修改后的完整代码如下:
<?php require "class.phpmailer.php"; $mail=new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 1; $mail->SMTPAuth = true; $mail->Host = "domain.mail.com"; $mail->Port = 000; $mail->Username = 'username@gmail.com'; $mail->Password = 'pass'; // 获取用户真实IP地址 $userIp = $_SERVER['REMOTE_ADDR']; if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $userIp = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $userIp = $_SERVER['HTTP_CLIENT_IP']; } $mail->SetFrom($mail->Username, $_POST['name']); $mail->AddAddress('username@gmail.com', 'username'); $mail->CharSet = 'UTF-8'; $mail->Subject = $_POST["topic"]; // 插入IP地址到邮件内容 $mail->MsgHTML('Name: '.$_POST["name"].'<br/> Subject: '.$_POST["topic"].'<br/> E-Mail: '.$_POST["email"].'<br/> IP Address: '.$userIp.'<br/> Message: '.$_POST["message"].'<br/>'); if($mail->Send()) { echo "<script>alert('Message successfully sent.');</script>"; header ("Refresh:0; url=index.html"); }else { echo $mail->ErrorInfo; } ?>
小提醒
直接使用用户提交的$_POST数据存在安全风险(比如XSS攻击),建议对$_POST['name']、$_POST['email']等参数做过滤处理,比如使用htmlspecialchars()函数转义特殊字符:
$safeName = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); $safeEmail = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); $safeTopic = htmlspecialchars($_POST['topic'], ENT_QUOTES, 'UTF-8'); $safeMessage = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
然后在邮件内容里使用这些经过转义的变量,这样能提升代码的安全性。
内容的提问来源于stack exchange,提问作者Mert Mutlu
相关产品推荐
相关产品推荐

