Gimhoy's Blog

[文章目录]

您曾经浏览过

WordPress后台登陆邮件提醒

本文最后更新于2013年7月21日,已超过三年没有更新,如果文章内容失效,请反馈给我们,谢谢!

 

前面的废话

分享一下前段时间开始用的WordPress后台登陆邮件提醒功能。不用不知道,一用吓一跳。用完之后每天邮箱里都有几百上前封登陆失败的邮件= =今天先分享怎么实现登陆邮件提醒,下一篇文章再讲防止被别人暴力破解密码的方法。

文章来自DH博客,修改了一下,把登陆成功提醒邮件里的密码删掉了,防止邮件被他人看见泄露密码。

 

实现方法

前提是空间有邮件功能,测试有无邮件功能的方法:登录界面点击“忘记密码”,有邮件发到你邮箱就有邮件功能。

一、登录成功提醒

就像银行的登录提醒一样,如果有人登录了系统,就会发一封邮件到邮箱,提醒你有人登录了,如果当时不是你登录,就要引起警惕了。将以下代码放入主题的functions.php中:


/*****************************************************
 函数名称:wp_login_notify v1.0 by DH.huahua. 
 函数作用:有登录wp后台就会email通知博主
******************************************************/
function wp_login_notify()
{
    date_default_timezone_set('PRC');
    $admin_email = get_bloginfo ('admin_email');
    $to = $admin_email;
	$subject = '你的博客空间登录提醒';
	$message = '<p>你好!你的博客空间(' . get_option("blogname") . ')有登录!</p>' . 
	'<p>请确定是您自己的登录,以防别人攻击!登录信息如下:</p>' . 
	'<p>登录名:' . $_POST['log'] . '</p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '</p>' .
	'<p>登录IP:' . $_SERVER['REMOTE_ADDR'] . '</p>';	
	$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: "" . get_option('blogname') . "" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}
 
add_action('wp_login', 'wp_login_notify');

二、登录失败提醒

有人尝试登陆你的系统,但是没有成功,这种反复尝试的动作本身就需要被记录下来,发给博主,这样,只要有错误的登录,就会发一封邮件到自己的邮箱,将对方尝试的登录名和登录密码发送到你邮箱。将以下代码放入主题的functions.php中:

/*****************************************************
 函数名称:wp_login_failed_notify v1.0 by DH.huahua. 
 函数作用:有错误登录wp后台就会email通知博主
******************************************************/
function wp_login_failed_notify()
{
    date_default_timezone_set('PRC');
    $admin_email = get_bloginfo ('admin_email');
    $to = $admin_email;
	$subject = '你的博客空间登录错误警告';
	$message = '<p>你好!你的博客空间(' . get_option("blogname") . ')有登录错误!</p>' . 
	'<p>请确定是您自己的登录失误,以防别人攻击!登录信息如下:</p>' . 
	'<p>登录名:' . $_POST['log'] . '</p>' .
	'<p>登录密码:' . $_POST['pwd'] .  '</p>' .
	'<p>登录时间:' . date("Y-m-d H:i:s") .  '</p>' .
	'<p>登录IP:' . $_SERVER['REMOTE_ADDR'] . '</p>';	
	$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
	$from = "From: "" . get_option('blogname') . "" <$wp_email>";
	$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
	wp_mail( $to, $subject, $message, $headers );
}
 
add_action('wp_login_failed', 'wp_login_failed_notify');

效果如下图所示,后面有个登录所在地是用qqwry.dat做了个查询(见http://blog.gimhoy.com/archives/wordpress-login-notification-with-location-info.html
wp-login-failed



免费获得每月10G空间+10G免费流量
  • Comment (14)
  • Trackback (4)
  • 代码复制有问题Mozilla FirefoxWindowsChina2013/08/01 20:28@Ta

    代码复制有问题 你可以自己试一试

    #3
    • GimhoyGoogle ChromeWindowsChina2013/08/02 03:44@Ta

      谢谢反馈,问题的根源找着了,有空再弄~

      • 谢单单Google ChromeWindowsChina2013/09/04 18:30@Ta

        @Gimhoy:我去....那你把代码改了么...

        • GimhoyGoogle ChromeWindowsChina2013/09/04 22:33@Ta

          @谢单单:右键复制就行了~

  • 麦田一根葱Google ChromeWindowsChina2013/07/17 12:03@Ta

    这个可以啊!放上了

    #2
  • root9000Mozilla FirefoxWindowsChina2013/07/17 08:37@Ta

    能放个有登录所在地的代码么。

    #1
    • GimhoyGoogle ChromeWindowsChina2013/07/17 12:16@Ta

      这个需要放一个IP数据库,和一个转换函数。。。过两天我写篇文章介绍下吧~

      • 麦田一根葱Google ChromeWindowsChina2013/07/17 13:34@Ta

        @root9000 @Gimhoy :可以调用腾讯的ip分享计划显示所在地:
        $ip = 自行查找获取ip代码
        function getIPLoc_QQ($ip){
        $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip;
        $ch = curl_init($url);
        curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
        $result = curl_exec($ch);
        $result = mb_convert_encoding($result,"utf-8","gb2312");
        curl_close($ch);
        preg_match("@(.*)@iU",$result,$ipArray);
        $loc = $ipArray[1];
        return $loc;
        }
        然后用 getIPLoc_QQ($ip) 输出就行

      • 麦田一根葱Google ChromeWindowsChina2013/07/17 13:36@Ta

        @Gimhoy:= =怎么把符号转换没了?重新发:$ip = 自行查找获取ip代码
        function getIPLoc_QQ($ip){
        $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip;
        $ch = curl_init($url);
        curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
        $result = curl_exec($ch);
        $result = mb_convert_encoding($result, "utf-8", "gb2312");
        curl_close($ch);
        preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
        $loc = $ipArray[1];
        return $loc;
        }
        然后用 getIPLoc_QQ($ip) 输出就行