emlog后台登录失败邮件通知

前面说到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 = 'https://imotao.com';//博客地址
    $bloglogo = '#';//博客logo
    $emailarr = '787066679@qq.com';//收信邮箱
    $mailname = 'imotao';//发件人(请勿中文)
    $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(https://imotao.com/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目录

原创文章,作者:陌涛,如若转载,请注明出处:https://imotao.com/202.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
陌涛陌涛
上一篇 2019年1月24日 下午8:33
下一篇 2019年1月24日 下午8:39

相关推荐

  • 一键DD任意VPS (支持国内小鸡,长期更新)

    阅读本教程,需要最基础的Linux知识。 1.通过ssh连接到Linux服务器 2.在Linux终端执行命令。 一、萌咖 dd脚本的开创者之一,简单快速,也一直在维护更新,缺点是不…

    2023年12月29日
    1.7K00
  • Epic喜加一《For The King》限时免费领取

    Epic喜加一《For The King》限时免费领取 本周Epic商城限时免费领取的游戏是《For The King》 这是一个具有战略、回合制战斗和Roguelike元素的混合…

    2020年4月24日
    93400
  • 亚马逊0元买45本Kindle电子书

    亚马逊0元买45本Kindle电子书 亚马逊中国开启世界阅读日活动,点击各个企业合作会场的【领取优惠券】后 购买亚马逊指定Kindle电子书下单即可享受0元购书优惠,点下面的精选好…

    2021年4月22日
    49100
  • 因QQ“小世界”存在色情引流信息,腾讯被罚100万元

    9 月 13 日,国家网信办发布公告称,近日,针对腾讯 QQ 平台“小世界”版块存在大量色情等违法信息,危害未成年人身心健康问题,国家网信办指导广东省网信办,依法约谈腾讯公司相关负…

    2023年9月14日
    67700
  • 一键关闭 Win11广告 OFGB汉化版

    OFGB是一款开源删除 Win11 各处广告的 GUI 工具 它是通过修改 Windows 注册表 来关闭 Windows 11 分散各处的广告设置。软件是用 C# 编写的,界面用…

    2024年11月16日
    2.6K00
  • 庆祝RNG夺冠 免费领夺冠图标永久皮肤

    英雄联盟完成一局游戏免费领图标和永久皮肤 在RNG夺冠后,英雄联盟又送皮肤啦!在5月28日-5月30日期间,完成1场任意游戏模式的对局 然后登录掌上英雄联盟,即可随机抽取1个永久皮…

    2021年5月29日
    64400
  • 大米API完成第三次改版

    每一次更新 都是一个新的突破,大米API-免费API数据接口调用服务平台! API官网地址:https://api.qqsuu.cn 由于新版本改动较大,请开发者注意查看接口文档!…

    2022年10月5日
    65800
  • 育碧免费喜+1《魔法门10传承》

    作为RPG传奇品牌《魔法门》系列的第十部作品,在《魔法门10:传承》中,玩家将会创建并率领自己的小队进入这个动荡的世界,与强力的神话生物战斗,掠取远古遗留下来的财宝,卷入卡索半岛纷…

    2020年11月5日
    69500
  • DNF地下城与勇士手游手Q内测报名地址 查询内测资格地址

    DNF地下城与勇士手游手Q内测报名地址 查询内测资格地址 这个游戏小编已经看各大直播平台已经有人在玩了,估计很快就要问世了 大家现在可以去申请内测资格,不过仅限部分受邀用户! 需要…

    2020年3月27日
    39500
  • 学生优惠集合

      本文介绍的是利用学生身份可以享受到的相关学生优惠权益,但也希望各位享受权利的同时不要忘记自己的义务,不要售卖、转手自己的学生优惠资格,使得其他同学无法受益。 Gith…

    2019年10月17日
    1.5K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。