phpermailer的学习

本文介绍如何使用PHPMailer发送带有验证链接的电子邮件。通过配置SMTP服务器及参数,实现用户注册时的邮箱验证流程。文章还提供了调试建议及解决常见问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

很多网站的用户登录注册模块都会涉及到一个邮箱验证的功能,用的地方还是挺多的。注册用户使用邮箱验证其实原理还是比较简单的,

可以在用户注册时,将信息经过验证过滤后写入数据库,之后用一个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这个类还是非常强大的,里面支持功能也非常多,包括群发或添加附件之类是非常方便的,有时间也可以将源代码研读一下

支持开源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值