前面说到emlog后台登录参数加密,下面我们说说如何给emlog添加后台登录失败邮件通知的功能,本次我们需要用到mail函数,当然也就是需要25端口发信,如果是阿里云等一些不支持25口发信的童鞋可以放弃或者学着本篇文章进行改造成smtp发信即可
第一步:
找到路径/admin/globals.php文件第17行,也就是if ($action == login) {这,然后一直选到(//退出)这行的前面,接着我们粘贴覆盖以下代码,其中的一些个人信息请改成自己的,我都已经做好备注了
if ($action == login) { $ip = isset($_POST['ip']) ? addslashes(trim($_POST['ip'])) : '';//获取登录者ip $username = isset($_POST['user']) ? addslashes(trim($_POST['user'])) : ''; $password = isset($_POST['pw']) ? addslashes(trim($_POST['pw'])) : ''; $ispersis = isset($_POST['ispersis']) ? intval($_POST['ispersis']) : false; $img_code = Option::get('login_code') == 'y' && isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : ''; $loginAuthRet = LoginAuth::checkUser($username, $password, $img_code); if ($loginAuthRet === true) { LoginAuth::setAuthCookie($username, $ispersis); emDirect("./"); } else{ $blogname = '杨小杰博客';//博客名称 $blogurl = 'http://blog.youngxj.cn';//博客地址 $bloglogo = 'http://blog.youngxj.cn/logopic.png';//博客logo $emailarr = 'admin@youngxj.com';//收信邮箱 $mailname = 'youngxj';//发件人(请勿中文) $subject = '密码错误提示';//邮件标题 $subject = "=?UTF-8?B?".base64_encode($subject)."?=";//防止拉黑字符编码 $header = "MIME-Version: 1.0\r\n"; $header .= "From: $mailname\r\n";//来自发件人 $header .= "Content-type: text/html; charset=utf-8\r\n";//设置头编码 $preview = '<div class="emailpaged" style="background-image: url(http://blog.youngxj.cn/content/templates/emedia_better/images/email.jpg);-webkit-background-size: cover;-moz-background-size: cover;-o-background-size: cover;background-size: cover;background-position: center center;background-repeat: no-repeat;"> <div class="emailcontent" style="width:100%;max-width:720px;text-align: left;margin: 0 auto;padding-top: 80px;padding-bottom: 20px"> <div class="emailtitle"> <h1 style="color:#fff;background: #51a0e3;line-height:70px;font-size:24px;font-weight:normal;padding-left:40px;margin:0"> '.$blogname.'账户登录失败通知! </h1> <div class="emailtext" style="background:#fff;padding:20px 32px 40px;"> <div style="padding:0;font-weight:bold;color:#6e6e6e;font-size:16px">尊敬的管理员您好!</div> <p style="color: red;font-size:13px;line-height:24px;">'.$blogname.'有一条登录失败的记录产生,若登录操作不是您产生的,请及时注意网站安全!</p> <table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal"> <thead><tr><th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8;">失败信息如下</th></tr></thead> <tbody> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">登录名</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$username.'</td> </tr> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">尝试的密码</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$password.'</td> </tr> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;">登录时间</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px"><span style="border-bottom: 1px dashed rgb(204, 204, 204); position: relative;">'.date("Y-m-d H:i:s").'</span></td> </tr> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;">登录IP</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$ip.'</td> </tr> </tbody> </table> <p style="color: #6e6e6e;font-size:13px;line-height:24px;">(此邮件由系统自动发出, 请勿回复。)</p> </div> <div class="emailad" style="margin-top: 24px;text-align:center;"> <a href="'.$blogurl.'" target="_blank"> <img src="'.$bloglogo.'" style="margin: auto;;max-width:700px;height: auto;"> </a> </div> <p style="color: #6e6e6e;font-size:13px;line-height:24px;text-align:right;padding:0 32px">邮件来自:<a href="'.$blogurl.'" style="color:#51a0e3;text-decoration:none" target="_blank">'.$blogname.'</a></p> </div> </div> </div>'; mail($emailarr,$subject,$preview, $header); LoginAuth::loginPage($loginAuthRet); } }
上面操作完成后,进行第二步
第二步:
找到路径/admin/views/login.php(如果使用的不同主题请自行变更路径)
我们可以在第二行插入一下代码
<?php function real_ip(){ //获取用户真实IP $ip = $_SERVER['REMOTE_ADDR']; if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) { foreach ($matches[0] AS $xip) { if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) { $ip = $xip; break; } } } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CF_CONNECTING_IP'])) { $ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } elseif (isset($_SERVER['HTTP_X_REAL_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) { $ip = $_SERVER['HTTP_X_REAL_IP']; } return $ip; } ?>插入完成后,找到以下内容
action="./index.php?action=login"
之后在form表单内插入以下代码
<input type="hidden" name="ip" value="<?php echo real_ip();?>" />插入完成后,就大功搞错,刷新浏览器缓存,使用错误的账号、密码进行登录测试,如果不出意外就能收到邮件了。
温馨提示:如果要使用smtp发信请更改第一步中else后面的内容即可,会玩smtp发信,应该就会玩,不会玩的请勿乱来。修改前记得备份admin目录
发表评论: