ThinkPHP3.2使用PHPMailer发送邮件
来源:互联网 发布:爱知工科大学怎么样 编辑:程序博客网 时间:2024/06/08 16:15
首先下载PHPMailer,直接在百度搜下,然后下载就好了。
接着注册一个新浪邮箱,用作发件人邮箱。qq和163邮箱都不稳定,有时邮件发不出去。
解压下载的文件(如果是压缩包),得到PHPMailer文件夹,文件夹下有以下文件:
紧接着把这个文件夹放到ThinkPhp中的Library中的Vendor下,具体路径为:项目文件夹\ThinkPHP\Library\Vendor\,
如图:
到这里,PHPMailer就算加入到Thinkphp3.2中了。
使用方法:
打开Application\Common\Common\function.php(如果没有这个文件,则新建一个):
加入以下代码:
function sendMail($to){ //Vendor('PHPMailer.PHPMailerAutoload'); vendor('PHPMailer.class#PHPMailer'); vendor('PHPMailer.class#SMTP'); $mail = new PHPMailer(); //实例化 $mail->IsSMTP(); // 启用SMTP $mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以新浪邮箱为例) $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证 $mail->Username = C('MAIL_USERNAME'); //发件人邮箱名,从config.php中获得 $mail->Password = C('MAIL_PASSWORD') ; //发件人邮箱密码 $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址) $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名 $mail->AddAddress($to,"尊敬的客户"); $mail->WordWrap = 50; //设置每行字符长度 $mail->Port = 25; $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件 $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码 $mail->Subject ='helloworld'; //邮件主题 $mail->Body = 'This email is sent by PHPMailer!'; //邮件内容 $mail->AltBody = "这是一个纯文本的身体在非营利的HTML电子邮件客户端"; //邮件正文不支持HTML的备用显示 $result = $mail->Send(); return $result;}
保存并退出。
接着打开Application\Common\Conf\config.php,加入以下代码:
<?phpreturn array( 'MAIL_HOST' =>'smtp.sina.com',//smtp服务器的名称,这里用的是新浪邮箱,qq: smtp.qq.com , 163:smtp.163.com 'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证 'MAIL_USERNAME' =>'liujan511536@sina.com',//发件人邮箱名,注意换成你注册的新浪邮箱地址 'MAIL_FROM' =>'liujan511536@sina.com',//发件人邮箱地址,注意换成你注册的新浪邮箱地址 'MAIL_FROMNAME'=>'liujan',//发件人姓名 'MAIL_PASSWORD' =>'*****',//密码,请填上发件人邮箱密码 'MAIL_CHARSET' =>'utf-8',//设置邮件编码 'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件);?>
保存并退出。
接着打开Home下的IndexController,
加入函数sendMail:
public function sendMail(){ $email = '3117789603@qq.com'; //收件人邮箱地址sendMail($email);}保存并退出。
在浏览器中输入一下地址:
http://localhost/thinkphp/Home/Index/sendMail
如果你的收件人邮箱地址有效,并且发件人邮箱地址和密码都正确的话,此时应该能正常发送邮件。上你的收件邮箱看下吧。
如果要用phpmailer来发送注册账户时的激活邮箱,则可以在数据库中给user表加上三个字段,reg_time(注册时间),status(0表示未激活,1表示已激活),verify_code(表示激活码)
然后用户注册时,以其输入的用户邮箱,密码加上当前时间利用md5来生成一个激活码verify_code:
$data['verify_code'] = md5($data['user_email'].$data['user_pwd'].$data['reg_time']);
然后再向用户输入的发送激活链接。
接着把用户输入的数据,注册时间,生成的激活码,写入数据库,注意status要为0
激活链接的内容主要是刚才生成的激活码,和用户点击激活链接时的处理函数,
比如我的激活链接样例是:
http://local
然后把
我在Home模块下的UserController里写了一个函数active,主要用来判断激活链接中的激活码是否和数据库中的一样,如果一样,则激活账户,否则激活失败;并且该链接只在24小时内有效,该函数内容如下:
public function active(){if (IS_GET){$verify_code = I("verify_code");$user = D("User");$data = $user->where("verify_code='$verify_code'")->find(); //找出数据库中verify_code和激活链接中的verify_code相同的那条记录if (!empty($data)){$user_id = $data['user_id'];if ($data['status'] == 0){$current_time = date("Y-m-d H:i:s", strtotime("-1 day")); //得到24小时前的时间if ($data['reg_time'] < $current_time){ //判断是否在24小时内echo "您的激活有效期已过,请重新注册发送激活邮件";$user->where("user_id='$user_id'")->delete();return false;}else{$data['status'] = 1; //激活成功if ($user->where("user_id='$user_id'")->save($data)){return true;}else{echo "激活失败,请重新注册";$user->where("user_id='$user_id'")->delete();return false;}}}else{ return true;}}else{echo "激活失败,请重新注册";return false;}}}
常见错误:
1. CLASS phpmailer not found:
解决方法:
进入Vendor中,打开class.phpmailer.php文件,将类名复制下,然后将class.phpmailer.php文件名中的phpmailer改成刚才复制的。同时在function.php文件中的vendor中class#后面的类名phpmailer都
改成刚才复制的。
2. PHPMailer错误SMTP Error: Could not connect to SMTP host
解决办法:
打开Vendor下的class.smtp.php,找到$this->smtp_conn = @fsockopen($host,// the host of the server
然后改成$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval);
打开class.phpmailer.php,找到函数 IsSMTP(),把$this->Mailer = 'smtp' 改成 $this->Mailer = 'SMTP',
同时把572-579行的case 'smtp'改成case 'SMTP'
3. 出现$mail->send()返回值一直为1(true)的情况
解决方法:
请把class.phpmailer.php中第572-579行中的
case 'smtp'改成case 'SMTP'
出现无法通过验证时,请把发件人的Username和From都设为你的邮箱(最好用新浪邮箱,qq和163有时会出现这种错误)
- ThinkPHP3.2使用PHPMailer发送邮件
- ThinkPHP3.2 使用PHPMailer 发送邮件
- Thinkphp3.2中使用PHPMailer发送邮件
- Thinkphp3.2 PHPMailer 发送邮件
- 在Thinkphp3.2 中使用PHPMailer 发送邮件
- ThinkPHP3.12使用PHPMailer发送邮件
- ThinkPHP3.2结合PHPMailer发送邮件
- Thinkphp3.2 整合PHPMailer发送邮件
- thinkphp3.2 实现 Phpmailer 发送邮件 配置
- thinkphp3.2.2通过PHPMailer发送邮件
- 使用PHPMailer发送邮件
- 使用 PHPMailer 发送邮件
- 使用phpMailer发送邮件
- 使用PHPMailer发送邮件
- 使用 PHPMailer 发送邮件
- 使用phpmailer发送邮件.
- 使用 PHPMailer 发送邮件
- 使用 PHPMailer 发送邮件
- 【树链剥分】专题小结
- [php] 静态方法 接口 链式操作
- poj 3723 kruscal,反边取最大生成树。
- 安装keepalived 报错`install' is up to date
- 设计模式(十八)之 Strategy(策略)
- ThinkPHP3.2使用PHPMailer发送邮件
- HDU ACM 4515 小Q系列故事——世界上最遥远的距离
- 英语学习电影资源
- 面试题:Java中对象序列化接口(Serializable)的意义
- 【重构】dll文件是什么
- 无需光驱恢复或重置系统(正常会提示插入介质)
- qtsdk仓库中国镜像
- android中 ImageView scaleType属性
- Remove Element