个人原因,突然想实现定时任务+邮件发送的功能(选择的是PHPMailer + qq邮箱 ),服务器是自己的, centos7+php7
学习文章:https://www.cnblogs.com/songbo236589/p/8184039.html
好了,废话少叙,开始正文
一、准备工作
1.安装拓展(sockets + openssl )
PHPMailer 需要 PHP 的 sockets 扩展支持,而登录 QQ 邮箱 SMTP 服务器则必须通过 SSL 加密的, PHP 还得包含 openssl 的支持。
拓展安装的事这里不再多说,请参考我的其他博客。这里注意一点,安装完拓展,更改完php.ini,记得重启php-fpm操作,然后php -m 命令查看拓展是否安装成功
2.qq邮箱开启stmp服务
设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
在POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务中开启 POP3/SMTP服务 及 IMAP/SMTP服务 两项
点击下面 生成授权码 获取授权码(中间有手机密保操作) 注意这个授权码是以后用的密码
3.PHPMailer准备
phpmailer的安装很简单,我只是放了几个文件进去
运行的时候报了个错误, PHP 7.2开始不主张使用function __autoload(){}来自动加载类文件,所以我对PHPMailerAutoload.php稍微进行了修改
1 //旧方法 2 //function __autoload($classname) 3 //{ 4 // PHPMailerAutoload($classname); 5 //} 6 7 //新方法 8 function autoload($classname) 9 { 10 PHPMailerAutoload($classname); 11 } 12 spl_autoload_register('autoload');
二、邮件程序
1 require './PHPMailerAutoload.php'; 2 ini_set("memory_limit", "512M"); 3 ini_set("display_errors", "On"); 4 error_reporting(E_ALL); 5 6 $mail = new PHPMailer; 7 8 $mail->Host = "ssl://smtp.qq.com"; //SMTP服务器 qq邮箱例子 9 10 $mail->Port = 465; //邮件发送端口 11 $mail->SMTPAuth = true; //启用SMTP认证 12 //$mail->SMTPDebug = true; //开启debug 13 14 $mail->CharSet = "UTF-8"; //字符集 15 16 $mail->Username = "***@qq.com"; //你的邮箱 17 $mail->Password = "fucpwkdufitcgcdb"; //你的密码(授权码) 18 $mail->Subject = "测试"; //邮件标题 19 20 $mail->From = "***@qq.com"; //发件人地址(也就是你的邮箱) 21 $mail->FromName = "***"; //发件人姓名 22 $mail->isHTML(true); //支持html排版 23 $mail->Subject = 'test'; //标题 24 $mail->addAddress('***@qq.com'); //收件人地址 可添加多个 25 $mail->Body = "测试";//内容 26 $mail->send(); 27 //var_dump($mail);
三、这里面有几点要注意的地方
1.明确ssl
$mail->Host = "ssl://smtp.qq.com"; (这里的地址要加上ssl://,不然会报错,邮件无法发送)
2.调试
$mail->SMTPDebug = true; //开启debug,方便调试
我还在底部打印了 $mail对象进行调试(意义不大)
3.端口
qq邮箱stmp的端口是 465/587,我用的是465,用之前先 telnet一下,命令 telnet smtp.qq.com 465
4.授权码变动
更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录
好了,先写到这里