composer下载phpmailer包之后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | <?php namespace app\api\controller; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception as mailerException; use PHPMailer\PHPMailer\SMTP; use think\App; class Email extends Controller { public $mail; public $config; /** * 邮件发送 * @param $sendTo 发送给对方的邮箱地址 string or array * @param $copyTo 抄送给对方的邮箱地址 string or array * @param $file 文件路径 array * @param $config 其他需要传的业务参数配置 */ public function sendEmail($sendTo, $copyTo, $file, $config) { $mail = new PHPMailer(true); try { $mail->SMTPDebug = 0; //调试邮件的日志输出格式 //$mail->Debugoutput = function($str, $level) { // echo "$str"; //}; $mail->isSMTP();// 使用SMTP服务 $mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码 $mail->Host = "smtp.exmail.qq.com";// 发送方的SMTP服务器地址 $mail->SMTPSecure = "ssl";// 使用ssl协议方式 $mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994 $mail->SMTPAuth = true;// 是否使用身份验证 $mail->Username = $config['user_email'];// 发送方的163邮箱用户名,就是你申请163的SMTP服务使用的163邮箱 $mail->Password = $config['password'];// 发送方的邮箱密码,注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码! $mail->setFrom($config['user_email']);// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为Mailer(xxxx@163.com),Mailer是当做名字显示 $mail->Subject = "邮件标题";// 邮件标题 $mail->Body = $config['nick_name'] . "的".date('Y-m-d')."邮件已提交";// 邮件正文 //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用 //接收邮件方 if(!empty($sendTo)){ if(is_array($sendTo)){ foreach ($sendTo as $v){ $mail->addAddress($v); } }else{ $mail->addAddress($sendTo); } } //$mail->addAddress('xxx@xxx.cn, xxxxx@xxxxx.com', '设置收件人地址');// 设置收件人信息,如邮件格式说明中的收件人,这里会显示为Liang(yyyy@163.com) //$mail->addReplyTo("xxx@xxx.cn", "设置回复人地址");// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址 //抄送邮件方 if(!empty($copyTo)){ if(is_array($copyTo)){ foreach ($copyTo as $v){ $mail->addCC($v); } }else{ $mail->addCC($copyTo); } } //$mail->addCC("xxx@qq.com");// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件) //$mail->addCC("xxx@qq.cn", 'jack');// 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址(这个人也能收到邮件) //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件) //添加附件, 必须使用本地磁盘路径,不能识别直接的https或者http的地址 if(!empty($file)){ if(is_array($file)){ foreach ($file as $v){ $mail->addAttachment($v); } }else{ $mail->addAttachment($file); } } if (!$mail->send()) {// 发送邮件 //return "Mailer Error: ".$mail->ErrorInfo.', 发送失败~'; echo json_encode(['code' => 400, 'msg' => '发送异常:'.$mail->ErrorInfo, 'data' => [], 'other'=>[]]); } else { echo json_encode(['code' => 200, 'msg' => '发送成功', 'data' => [], 'other'=>[]]); } } catch (\Exception $e){ echo json_encode(['code' => 400, 'msg' => '发送异常:'.$mail->ErrorInfo, 'data' => [], 'other'=>[]]); } } } |
复制一下修改就可以直接使用,使用方法如下:
1 2 3 4 5 6 7 8 9 10 11 | $sendTo = ['xxx@qq.com', 'xxx@qq.com']; $copyTo = ['xxx@qq.com', 'xxx@qq.com']; $file = ['D:\image.png', 'C:\eg.jpg', 'D:\file\test.xlsx', '/www/public/statis/img/inage.png']; $config = [ 'user_email' => $user_email, 'password' => $password, 'send_name' => $send_name, 'nick_name' => $nick_name, ]; $mail = new Email(); $mail->sendEmail($sendTo, $copyTo, $file, $config); |