这段时间修改了一下我们系统的登陆功能,为了更加安全,增加了发送邮件验证功能。当用户登陆的时候判断登陆ip是否是之前登陆过的,如果不是的话,需要向邮箱里发送验证码,然后把收到的验证码输入再登陆,如果验证码正确并且时间没有超过规定时间,可以登陆,并且记下此次登陆的ip和时间,以后再以此ip登的话,就不用验证了。如果时间超过了,验证码失效,需重新发送。验证错误不能登陆,需重新输验证码,或在发送新的验证码到邮箱。为了实现此功能,我用到了如何向邮箱发送邮件,以及获取登陆ip的知识。下面整理一下,以便以后自己查看。
发送邮件:
首先需要下载phpmail的压缩包,然后解压,把解压后的文件复制到项目中。在项目中引入文件。
require("phpmailer/class.phpmailer.php"); //文件的路径具体看自己的项目中的路径是怎么样的
function postmail($to,$subject = "",$body = ""){
//$to 表示收件人地址 $subject 表示邮件标题 $body表示邮件正文
//error_reporting(E_ALL);
error_reporting(E_STRICT);
date_default_timezone_set("Asia/Shanghai");//设定时区东八区
require('./include/PHPMailer/class.phpmailer.php');
$mail = new PHPMailer(); //new一个PHPMailer对象出来
$body = eregi_replace("[\]",'',$body); //对邮件内容进行必要的过滤
$mail->CharSet ="UTF-8";//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPDebug = 1; // 启用SMTP调试功能
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
//$mail->SMTPSecure = "ssl"; // 安全协议
$mail->Host = "smtp.163.com"; // SMTP 服务器 以163信箱为例,其他的邮箱需要改成其他的
//$mail->Port = 465; // SMTP服务器的端口号
$mail->Username = "*******@163.com"; // SMTP服务器用户名
$mail->Password = "********"; // SMTP服务器密码
$mail->SetFrom('邮箱地址', '邮件题目');
$mail->AddReplyTo("回复地址","邮件回复人的名称");
$mail->Subject = $subject;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.com"; // optional, comment out and test
$mail->MsgHTML($body);
$address = $to;
$mail->AddAddress($address, "收件人名称");
//$mail->AddAttachment("images/phpmailer.gif"); // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!恭喜,邮件发送成功!";
}
}
获取ip地址:
//获取ip地址
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$cip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif(!empty($_SERVER["REMOTE_ADDR"])){
$cip = $_SERVER["REMOTE_ADDR"];
}
else{
$cip = "无法获取!";
}
return $cip;
}
$ip=GetIP(); //调用该函数
ps:发送邮件功能还可用于注册时邮箱激活功能。