- 先下载tp5发邮件扩展
使用composer安装phpmailer
composer require phpmailer/phpmailer
https://github.com/PHPMailer/PHPMailer 直接下载下来之后,在TP5框架的extend文件夹里面建一个PHPMailer文件夹
把下载下来的文件夹里边的src里边的 PHPMailer.php 和 SMTP.php 放在 刚刚创建的 TP5/extend/PHPMailer这个文件夹里
- 然后在自己的方法里发送邮件就行了
然后把 PHPMailer.php 和 SMTP.php 的命名空间改成 PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
/**
* 设置邮箱验证功能
*
* @param string $toEmailUrl
* @param string $url
* @return bool
* @throws \PHPMailer\PHPMailer\Exception
*/
public function setEmail($toEmailUrl='',$url='')
{
$mail = new PHPMailer();
//——————————————————————————————————————————————————————————————————————
$toemail = $toEmailUrl;//收件人
//$toemail = '121283134@qq.com';//收件人
//——————————————————————————————————————————————————————————————————————
$mail->isSMTP();// 使用SMTP服务
$mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
$mail->Host = "smtp.163.com";// 发送方的SMTP服务器地址
$mail->SMTPAuth = true;// 是否使用身份验证
$mail->Username = "13009994391@163.com";/// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱
$mail->Password = "OHJTNXWXGTLZWGBG";// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码!
$mail->SMTPSecure = "ssl";// 使用ssl协议方式
$mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994
$mail->setFrom("13009994391@163.com","SUN.WEI.ZHAO");// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示
$mail->addAddress($toemail,'SUN');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com)
$mail->addReplyTo("13009994391@163.com","Reply");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
//$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
//$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
//$mail->addAttachment("bug0.jpg");// 添加附件
$mail->Subject = "修改密码验证";// 邮件标题
//$num = rand(100000,999999);
//$num = $this->randomVerification();
//________________________________________________________________________________________________________
//$mail->Body = "邮件内容是 :您的验证码是:".$num;// 邮件正文
$mail->Body = "请点击当前链接进行密码修改:http://tp2021.cc".$url;// 邮件正文
//________________________________________________________________________________________________________
//$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
if(!$mail->send()){// 发送邮件
// echo "Message could not be sent.";
//echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息
//echo 2;
return false;
}else{
return true;
//echo '发送成功'; //成功
//echo '<br>';
}
}
- 以163邮箱为例
163邮箱客户端授权密码获取方法**:
- 登录163邮箱后,点击上方导航栏的【设置】-【邮箱设置】。
- 因为我们要先查看POP3/SMTP/IMTP服务是否已开启了,确认没有开启再点击【必须先开能客户端授权密码】;客户端授权密码是不会自动开启的,需要主动点击设置为开启。
- 客户端授权密码需要绑定手机才能够进行设置,输入已绑定邮箱的手机号码点击获取验证码,一个号码一天只能发送三次验证码。当提示已获得客户端授权密码的时候,同时也会开通POP3/SMTP/IMTP邮件收发服务。值得注意的是,此客户端授权密码的提示只会出现一次最好截图记录。
- 方法调用
//发送邮件验证
$sendResult = $this->setEmail('99420456@qq.com',url('Login/changePwd',[$userCacheId=>$signature]));