您的位置:首页 > 编程语言 > PHP开发

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,标题与内容

.....

代码设置对应如下:

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这个类还是非常强大的,里面支持功能也非常多,包括群发或添加附件之类是非常方便的,有时间也可以将源代码研读一下
支持开源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: