thinkphp5.0使用PHPMailer发邮件

点击“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%以上的问题

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181215G0736500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券