点击“PHP超级教程”关注获取更多教程
发邮件的功能工作中也是用的比较多的,今天上班的时候有需求是和邮件相关的,于是我就用tp5.0测试PHPMailer来发邮件,下载引入很简单,但是new一个PHPMail()的时候,就是各种报错,但是网上的各种解决办法太过单一,基本都试了一遍,可能需要几种方式一起才能解决,所以在这里总结一下,方便后期加深学习!
PHPMailer的安装
推荐使用composer进行安装,由于路径的问题,不建议新手手动引入文件。
1.手动下载:一般放在网站目录下的extend目录中
https://pan.baidu.com/s/14Zu-0zoi2pG_5K3iJdlxpg
2.composer安装:安装好后会出现在voder中
composer require phpmailer/phpmailer
/**
* 邮件发送
* @param $to 收件人邮箱地址
* @param $title 邮件标题
* @param $content 邮件内容
*/
function sendMail($to,$title,$content)
{
$mail = new PHPMailer();
// 使用SMTP服务
$mail->isSMTP();
//错误调试
//$mail->SMTPDebug = 2;
// 编码格式为utf8,不设置编码的话,中文会出现乱码
$mail->CharSet = "utf8";
// 发送方的SMTP服务器地址
//$mail->Host = "smtp.qq.com";
// 是否使用身份验证
$mail->SMTPAuth = true;
//QQ发送使用下面的配置
//发件邮箱账号
//发送方的邮箱密码,不是登录密码,是qq的第三方授权登录码,要自己去开启,在邮箱的设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务里面
$mail->Password = "safafdaefda";
// 本体可以暂时使用ssl,更新外网使用ssl协议方式,
$mail->SMTPSecure = "tls";
// QQ邮箱的ssl协议方式端口号是465/587
$mail->Port = 587;
// 设置发件人信息,如邮件格式说明中的发件人,
// 设置收件人信息,如邮件格式说明中的收件人
$mail->addAddress($to, '哈克');
// 收件人收到地址后回复给哪个邮箱
// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
// 设置秘密抄送人(这个人也能收到邮件)
// 添加附件
//$mail->addAttachment("bug0.jpg");
// 邮件标题
$mail->Subject = $title;
// 邮件正文
$mail->Body = $content;
//$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
if (!$mail->send()) {// 发送邮件
$arr=[
'error'=>0,
'msg'=>$mail->ErrorInfo
];
} else {
$arr=[
'error'=>1,
'msg'=>'发送成功'
];
}
return $arr;
}
错误调试
一般的错误就是smtp连接失败。或者报PHPMailer类不存在,这些所有的错误,可以通过下面几种方式来调试
一:
打开 php.ini 里面的两个扩展,去掉前面的分号
extension=php_sockets.dll
extension=php_openssl.dll
二:
尝试把SMTP.php里面的函数修改一下,两种方式
1>将fsockopen函数替换成pfsockopen函数,执行看下,如果还是不行,可以采用第二种方式来处理
2>一般fsockopen()被禁,pfsockopen也有可能被禁,所以这里使用函数stream_socket_client()。
修改为:
$this->smtp_conn = stream_socket_client(参数不变);
三:
如果还是不能成功 调整下面的参数,每个都试试
$mail->SMTPSecure = "ssl"; //换成tls试试
$mail->Port = 587;//端口465 587 25
四:
尝试修改PHPMailer.php里面的smtp换成SMTP
$this->Mailer = 'smtp';
通过这几种方式,可以解决85%以上的问题
领取专属 10元无门槛券
私享最新 技术干货