phpMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
composer安装
composer require phpmailer/phpmailer
发送邮件(以tp6框架为例)
app\index\controller\Index.php
<?php
namespace app\index\controller;
use app\BaseController;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
use think\facade\Db;
use think\facade\Cache;
class Index extends BaseController
{
public $maillist=[
[
'Host'=>"smtp.163.com",
'Port'=>"465",
'Username'=>"xxx@163.com",
'Password'=>"YGFDAVZVRGIQWBXC",
],
[
'Host'=>"smtp.qq.com",
'Port'=>"465",
'Username'=>"xxx@qq.com",
'Password'=>"oxdkempurasfbjjd",
],
];
public function sendM(){
$toemail="xxx@qq.com";
$bookname="斗破苍穹";
$path="http://baidu.com";
foreach ($this->maillist as $i => $m){
$errorcount=Db::table('logs')->where('username',$m['Username'])->where('status',0)->whereTime('created_at',strtotime(date("Y-m-d"),time()))->count();
if($errorcount<10){//错误超过十条记录选择下一个邮箱
$logscount=Db::table('logs')->where('username',$m['Username'])->whereTime('created_at',strtotime(date("Y-m-d"),time()))->count();
if($logscount<590){//每日限量六百超过六百选择下一个邮箱
$list=$m;
$list_i=$i;
break;
}else{
$list=[];
}
}else{
$list=[];
}
}
if($list){
$status=$this->sendMail($toemail,$bookname,$path,$list['Username'],$list['Password'],$m['Host'],$m['Port']);
Db::table('logs')->insert(['toemail'=>$toemail,'bookname'=>$bookname,'path'=>$path,'username'=>$list['Username'],'status'=>$status,'created_at'=>time()]);
if($status==1){
// $this->success("发送成功");
echo "OK";
exit;
}elseif($status==0){
// $this->error("发送失败,请稍后再试");
echo("发送失败,请稍后再试");
exit;
}
}else{
// $this->error("邮件全部额度使用完毕");
echo("邮件全部额度使用完毕");
exit;
}
}
public function sendMail($toemail,$bookname,$path,$Username,$Password,$Host,$Port){
// $toemail = 'rongdejikejian@163.com';//定义收件人的邮箱
try {
$mail = new PHPMailer(true);
$mail->isSMTP();// 使用SMTP服务
$mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码
$mail->Host = $Host;// 发送方的SMTP服务器地址
$mail->SMTPAuth = true;// 是否使用身份验证
$mail->Username = $Username;// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;">
$mail->Password = $Password;// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码!</span><span style="color:#333333;">
$mail->SMTPSecure = "ssl";// 使用ssl协议方式</span><span style="color:#333333;">
$mail->Port = $Port;// 163邮箱的ssl协议方式端口号是465/994
$mail->setFrom($Username,$Username);// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示
$mail->addAddress($toemail);// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com)
// $mail->addReplyTo($Username, "Reply");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
//$mail->addCC("xxx@163.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件)
//$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
//$mail->addAttachment("bug0.jpg");// 添加附件
$mail->Subject = $toemail."需要的资料包下载地址";// 邮件标题
$mail->IsHTML(true);
$mail->Body = "您好请查看:". $bookname ."的下载链接 <a href='". $path."'>点击下载</a>";// 邮件正文
// var_dump($mail->Body);exit;
//$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用
// exit;
$mail->send();
return 1;
} catch (Exception $e) {
return 0;
}
}
}
如果为企业邮箱为以下接口