wordpress注册发送邮件或者直接显示密码

张映 发表于 2010-07-13

分类目录: wordpress

标签:, , ,

一直以来都没有注意到自己的博客不能注册,今天把注册的东西改了一下。我本地改好了,直接显示密码或者发送邮件都是可以的,上传服务器上就不行了,phpmailer,smtp发送邮件老是实败,根本原因是在国外连接国内的smtp服务器老是超时,提示unable to connect to smtp.163.com:25 (Connection timed out) ,搞得我很郁闷,我想如果是国内的服务器肯定是可以的,制作过程如下:

1,制作一个mail_fun.php

<?php
require_once( ABSPATH . 'wp-includes/class.phpmailer.php');    //包函邮件发送类
//邮件发送
function send_mail($frommail,$tomail,$subject,$body,$ccmail,$bccmail) {
 $mail = new PHPMailer();
 $mail->IsSMTP();                            // 经smtp发送
 $mail->Host     = "smtp.163.com";           // SMTP 服务器
 $mail->SMTPAuth = true;                     // 打开SMTP 认证
 $mail->Username = "zhangyinghf@163.com";    // 用户名
 $mail->Password = "************";          // 密码
 $mail->From     = $frommail;                  // 发信人
 $mail->FromName = "海底苍鹰tank";        // 发信人别名
 $mail->AddAddress($tomail);                 // 收信人
 if(!empty($ccmail)){
 $mail->AddCC($ccmail);                    // cc收信人
 }
 if(!empty($bccmail)){
 $mail->AddCC($bccmail);                   // bcc收信人
 }
 $mail->WordWrap = 50;
 $mail->IsHTML(true);                            // 以html方式发送
 $mail->Subject  = $subject;                 // 邮件标题
 $mail->Body     = $body;                    // 邮件内容
 $mail->AltBody  =  "请使用HTML方式查看邮件。";
 return $mail->Send();
}
?>

2,将mail_fun.php,class.mailer.php,class.smtp.php上传到wp-includes上面,class.mailer.php,class.smtp.php这二个文件,解压phpmailer的时候里面会有的

3,wp-login.php文件里面有个function名字是register_new_user找到下内容

wp_new_user_notification($user_id, $user_pass); //大约在281行

替换成以下内容

if(empty($_COOKIE['way'])){
send_mail("zhangyinghf@163.com",$user_email, sprintf(__('[%s] Your username and password'), $blogname), $message);
}else{
setcookie("user_login", $user_login,time()+1800);
setcookie("user_pass", $user_pass,time()+1800);
}

4,还是在wp-login.php里面找到$user_email = $_POST['user_email'];大约在422行,在下面添加

$way = $_POST['getpassword'];

 if($way == 2){
 setcookie("way", $way,time()+1800);
 }else{
 setcookie("way", "");
 }

5,在wp-login.php的里面找到name="user_email",就是在填写email的下面加上一个选择是发邮件获得密码,还是直接显示获得密码

<p>
 <label><?php echo "获得密码的方式(默认通过邮件取得密码)" ?><br />
 <input type="radio" name="getpassword"  value="1" size="25" <?php echo $way==1?"checked":"";?> tabindex="20" />邮件方式获得<br>
 <input type="radio" name="getpassword"  value="2" size="25" <?php echo $way==2?"checked":"";?> tabindex="20" />直接显示
 </label>
 </p>

6,在wp-login.php里面找到isset($_GET['checkemail']) && 'registered' == $_GET['checkemail']大约在546行,将里面的

$errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');

替换成

if(!empty($_COOKIE['way'])){
$errors->add('registered',__('注册成功!<br/><br/>用户名:'.$_COOKIE['user_login'].'<br/>密码:'.$_COOKIE['user_pass'].'<br/>登录后修改密码'));
}else{
$errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');
}

7,在wp-settings.php里面找到define('WPINC', 'wp-includes');在其下面添加一行

require (ABSPATH . WPINC . '/mail_fun.php');

其实我用的wordpress里面,封装了class.phpmailer.php,我不想在原来的基础上改,因为将来升级的话,这些东西肯定会被盖掉的。



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/wordpress/915.html