PHP使用phpmailer发送邮件

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;
        }
        
    }
    
    
   
}

如果为企业邮箱为以下接口

易企业邮箱客户端要怎么设置imap、pop和smtp呢?

0 评论
内联反馈
查看所有评论