使用PHP发邮件,需要PHPMailer类库,今天记录下使用PHPMailer的一些使用方法。
使用环境
0、版本不同,可能会导致解决方案行不通,故记录使用环境。
1、Apache/2.4.33 (Win64) PHP/5.6.35
2、ThinkPHP5.0.21
3、phpmailer 6.0
安装dompdf
1、使用命令行进入到项目根目录
cd C:\wamp64\www\tp5
2、使用composer安装phpmailer
composer require phpmailer/phpmailer
3、检查是否安装成功
在C:\wamp64\www\tp5\vendor看是否有phpmailer文件夹
使用方法一
//实例化PHPMailer
$this->mail = new \PHPMailer();
//是否启用smtp的debug进行调试,开发模式开启
$mail->SMTPDebug = 1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//使用鉴权方式,这里必须是true
$mail->SMTPAuth = true;
//设置加密方式,这里使用SSL
$mail->SMTPSecure = 'ssl';
//设置邮件服务器地址,这里使用QQ域名的邮箱服务器
$mail->Host = 'smtp.qq.com';
//设置邮箱服务器端口
$mail->Port = 465;
//设置登录邮箱账号,你的邮箱
$mail->Username = '#############';
//设置授权码,从邮箱里面设置SMTP获得
$mail->Password = '##############';
//设置发送邮件邮箱信息,和登录邮箱账号一致
$mail->setFrom('#########', '发送人')
//设置接收邮件邮箱信息,你要发送的邮箱
$mail->addAddress('##########');
//附件
$mail->addAttachment(ROOT_PATH.'/public/letters/test.pdf');
//邮件主题
$mail->Subject = '邮件主题';
//邮件内容
$mail->Body = '邮件内容';
使用方法二
使用于tls方式、25端口,大致参数一样,需要改变几个关键的地方。
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
));
$mail->SMTPSecure = 'tls';
$mail->Port = 25;
关于调试
开启调试
$mail->SMTPDebug = 1;
有时调试只能看到比较大概的错误,要想看到详细的错误就需要设置调试等级,先来看源码注释内容
/**
* Debug output level.
* Options:
* * self::DEBUG_OFF (`0`) No debug output, default
* * self::DEBUG_CLIENT (`1`) Client commands
* * self::DEBUG_SERVER (`2`) Client commands and server responses
* * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
* * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
* @var integer
*/
可以大致看出每个等级显示信息内容:
0 => 默认不开启调试输出
1 => 客户端命令
2 => 客户端命令和服务器反馈
3 => 附加一些连接状态
4 => 底层数据输出,所有信息
由此可见,如果还没有找到想要的信息,不妨设置到3 和 4看看。有具体的错误信息,才能更快的解决问题。
相关扩展
使用这个类库需要开启openssl,sockets,一般都默认开启了。没有开启的,找到php.ini去掉以下两行前面的分号,开启扩展。
extension=php_openssl.dll
extension=php_sockets.dll
访问phpinfo(),检查他们是否开启。
结语
1、整体上这个类库坑不是很多,可能就是使用tls、25端口的时候有些坑。
2、使用$mail->SMTPDebug调试非常重要
3、使用QQ邮箱服务器发送邮件,需要先去自己的邮箱设置STMP,并获取授权码。