phpermailer的学习
2016-04-16 20:59
615 查看
背景:
很多网站的用户登录注册模块都会涉及到一个邮箱验证的功能,用的地方还是挺多的。注册用户使用邮箱验证其实原理还是比较简单的,
可以在用户注册时,将信息经过验证过滤后写入数据库,之后用一个status的字段,记录为未激活状态,此时构建一个url参数,这里假设为token='1dady21%12';,
发送一个带token参数给用户,用户点击之后验证token成功后就将用户的status状态改为1.表示已激活,奥,扯远了~
回过头来,目前php内置的mail函数在使用上还是非常不方便和稳定的,而且还容易被当成垃圾消息。现在流行使用smtp服务器发送,外加一个phpmailer一个开源的邮件发送类,支持多种SMTP服务器。
一,下载phpmailer
为了保证phpmailer代码的纯正性,还是到Github上下载
https://github.com/PHPMailer/PHPMailer
github上有许多例子讲解,也方便初学者快速掌握
二,配置参数
在配置参数之前,先保证手上有一个开通smtp服务的邮箱,这里以163邮箱为主。
总共需要配置的参数有:
1,host 邮箱服务器地址
2,是否开启SSL
3,邮箱服务器的登录名及其密码
4,发送方/接送方
5,标题与内容
.....
代码设置对应如下:
三,发送邮件
常用来调试代码,邮件发送看似简单,其实配置问题对于新手来说还是会造成一定的阻碍,利用好捕捉错误,便能快速定位问题$mail->ErrorInfo
try{
....
}catch{
...
}
四,常见问题
1,配置参数错误:
Language string failed to load:
这类型的错误,通常是参数设置不对,如邮箱格式不对,端口被占用等等
2,smtp服务器问题
SMTP Error: Could not authenticate
这个是因为smtp验证没通过,就是smtp server 的用户名和密码不正确了,在确认不是smtp服务器设置问题,再来看看下面可能出现的问题点
还有原因就class.phpmailer.php和class.smtp.php这两个文件某处需要修改,这两个文件是发送邮件的核心文件,一般容易出错的应该是以下这几点
1)大部分邮件服务器支持SMTP大写而不支持小写,所以在,class.smtp.php中找到之后进入$this->Mailer = ‘smtp';修改成如下代码:$this->Mailer = ‘SMTP’修改完成之后在继续找到public function Send() 中的case ‘smtp':修改成case ‘SMTP’即可
如果是因为php.ini文件未开启socket相关扩展,就...
2)如网上朋友所讲的,是某些函数被禁用而导致程序功能异常的,在这里就不再累赘,直接抛出 http://www.php230.com/1410493441.html
3,Could not execute: /usr/sbin/sendmail
注释掉这句话便可:$mail->IsSendmail();
这是一个发送邮件的组件,如果电脑没有的话就会报错
4,乱码:
五,总结
Phpmailer这个类还是非常强大的,里面支持功能也非常多,包括群发或添加附件之类是非常方便的,有时间也可以将源代码研读一下
支持开源。
很多网站的用户登录注册模块都会涉及到一个邮箱验证的功能,用的地方还是挺多的。注册用户使用邮箱验证其实原理还是比较简单的,
可以在用户注册时,将信息经过验证过滤后写入数据库,之后用一个status的字段,记录为未激活状态,此时构建一个url参数,这里假设为token='1dady21%12';,
发送一个带token参数给用户,用户点击之后验证token成功后就将用户的status状态改为1.表示已激活,奥,扯远了~
回过头来,目前php内置的mail函数在使用上还是非常不方便和稳定的,而且还容易被当成垃圾消息。现在流行使用smtp服务器发送,外加一个phpmailer一个开源的邮件发送类,支持多种SMTP服务器。
一,下载phpmailer
为了保证phpmailer代码的纯正性,还是到Github上下载
https://github.com/PHPMailer/PHPMailer
github上有许多例子讲解,也方便初学者快速掌握
二,配置参数
在配置参数之前,先保证手上有一个开通smtp服务的邮箱,这里以163邮箱为主。
总共需要配置的参数有:
1,host 邮箱服务器地址
2,是否开启SSL
3,邮箱服务器的登录名及其密码
4,发送方/接送方
5,标题与内容
.....
代码设置对应如下:
require '../class.phpmailer.php'; try { $mail = new PHPMailer(true); //New instance, with exceptions enabled $body = file_get_contents('contents.html'); $body = preg_replace('/\\\\/','', $body); //Strip backslashes $mail->IsSMTP(); // tell the class to use SMTP $mail->SMTPAuth = true; // enable SMTP authentication $mail->Port = 25; // set the SMTP server port $mail->Host = "mail.yourdomain.com"; // SMTP server $mail->Username = "name@domain.com"; // SMTP server username $mail->Password = "password"; // SMTP server password $mail->IsSendmail(); // tell the class to use Sendmail $mail->AddReplyTo("name@domain.com","First Last"); $mail->From = "name@domain.com"; $mail->FromName = "First Last"; $to = "someone@example...com"; $mail->AddAddress($to); $mail->Subject = "First PHPMailer Message"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test $mail->WordWrap = 80; // set word wrap $mail->MsgHTML($body); $mail->IsHTML(true); // send as HTML $mail->Send(); echo 'Message has been sent.'; } catch (phpmailerException $e) { echo $e->errorMessage(); }
三,发送邮件
$mail->Send();
常用来调试代码,邮件发送看似简单,其实配置问题对于新手来说还是会造成一定的阻碍,利用好捕捉错误,便能快速定位问题$mail->ErrorInfo
try{
....
}catch{
...
}
四,常见问题
1,配置参数错误:
Language string failed to load:
这类型的错误,通常是参数设置不对,如邮箱格式不对,端口被占用等等
2,smtp服务器问题
SMTP Error: Could not authenticate
这个是因为smtp验证没通过,就是smtp server 的用户名和密码不正确了,在确认不是smtp服务器设置问题,再来看看下面可能出现的问题点
还有原因就class.phpmailer.php和class.smtp.php这两个文件某处需要修改,这两个文件是发送邮件的核心文件,一般容易出错的应该是以下这几点
1)大部分邮件服务器支持SMTP大写而不支持小写,所以在,class.smtp.php中找到之后进入$this->Mailer = ‘smtp';修改成如下代码:$this->Mailer = ‘SMTP’修改完成之后在继续找到public function Send() 中的case ‘smtp':修改成case ‘SMTP’即可
如果是因为php.ini文件未开启socket相关扩展,就...
2)如网上朋友所讲的,是某些函数被禁用而导致程序功能异常的,在这里就不再累赘,直接抛出 http://www.php230.com/1410493441.html
3,Could not execute: /usr/sbin/sendmail
注释掉这句话便可:$mail->IsSendmail();
这是一个发送邮件的组件,如果电脑没有的话就会报错
4,乱码:
header("content-type:text/html;charset=utf-8");
五,总结
Phpmailer这个类还是非常强大的,里面支持功能也非常多,包括群发或添加附件之类是非常方便的,有时间也可以将源代码研读一下
支持开源。
相关文章推荐
- PHP编译执行Java源文件并重定向输出
- TPC-H
- php $_get
- Resolving an unable to fork PHP warning in Windows
- PHP框架认识初步
- PHP :Call to undefined function mysql_connect()
- matplotlib-绘制精美的图表
- 绘图: matplotlib核心剖析
- PHP Cookies和Session
- 经典排序算法的PHP实现类
- 关于RTP中的时间戳问题
- 文章标题
- laravel路由基础
- php MYSQL 一条语句中COUNT出不同的条件
- Ubuntu下搭建tftp服务器最简单方法
- phpcms v9 二次开发 前台上传图片
- zend_language_scanf & parse
- 在Web/Phpstorm中设置连接FTP(附带:文件比较,上传下载,同步等)
- PHP多维数组和日期时间函数
- php实现SESSION跨域