PHP使用PHPMailer发送邮件

一、PHPMailer概述

1.1PHPMailer是什么

PHPMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。

1.2PHPMailer优点

  • 1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
  • 2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
  • 3、支持嵌入图像,附件,HTML 邮件。
  • 4、可靠的强大的调试功能。
  • 5、支持 SMTP 认证。
  • 6、自定义邮件头。
  • 7、支持 8bit、base64、binary 和 quoted-printable 编码。

1.3下载 PHPMailer

从 github 上下载: https://github.com/PHPMailer/PHPMailer/

二、准备工作

2.1PHP环境准备

20200905172553240-1

确保PHP环境开启openssl,如果未开启,检查ext文件夹下是否有php_openssl.dllphp_sockets.dll两个dll,php.ini文件中把20200905173041307-1前面的;去掉

2.2开启QQ邮箱的 SMTP服务(其他主流邮箱也一样支持)

邮箱名称下面点击设置

20200914200056962-1

点击账户

2020091420052275

拉到下面,开启POP3/SMTP服务、IMAP/SMTP服务以及生成授权码

20200914200710778-1

20200914200821880-1

20200914200831735-1

20200914200837953-1

2.3下载PHPMailer源码

Github下载地址:https://github.com/PHPMailer/PHPMailer

需要用到的两个类分别是PHPMailer、SMTP,将这两个文件拷到项目中

20200918220238127-1

三、完整代码

/*发送邮件方法
 *@param $to:接收者 $title:标题 $content:邮件内容
 *@return bool true:发送成功 false:发送失败
 */
function sendMail($to,$title,$content) {
    // 这个PHPMailer 就是之前从 Github上下载下来的那个项目
    require 'src/PHPMailer.php';
    $mail = new PHPMailer;
    // 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式,
    // 可选择的值有 1 、 2 、 3
    // $mail->SMTPDebug = 2;     
    //使用smtp鉴权方式发送邮件
    $mail->isSMTP();                                      
    //smtp需要鉴权 这个必须是true
    $mail->SMTPAuth = true;                               
    // qq 邮箱的 smtp服务器地址,这里当然也可以写其他的 smtp服务器地址
    $mail->Host = 'smtp.qq.com';
    //smtp登录的账号 这里填入字符串格式的qq号即可
    $mail->Username = '[email protected]';                 
    // 这个就是之前得到的授权码,一共16位
    $mail->Password = 'nioxunyqzmrqbaeb';     
    //设置使用ssl加密方式登录鉴权                      
    $mail->SMTPSecure = 'ssl';                            
    // //设置ssl连接smtp服务器的远程服务器端口号,可选465或587
    $mail->Port = 465;
    //设置smtp的helo消息头 这个可有可无 内容任意
    // $mail->Helo = 'Hello smtp.qq.com Server';
    //设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
    // $mail->Hostname = 'http://www.lsgogroup.com';
    //设置发送的邮件的编码 也可选 GB2312
    $mail->CharSet = 'UTF-8';                        
    $mail->setFrom('[email protected]', '林深时见禄');
    // $to 为收件人的邮箱地址,如果想一次性发送向多个邮箱地址,则只需要将下面这个方法多次调用即可
    $mail->addAddress($to);
    //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
    $mail->isHTML(true);
    // 该邮件的主题
    $mail->Subject = $title;
    // 该邮件的正文内容
    $mail->Body = $content;
    //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
    $mail->addAttachment('E:/370205030101010301_20200903142139_4.jpg','mm.jpg');
    //同样该方法可以多次调用 上传多个附件
    // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
    // 使用 send() 方法发送邮件
    if(!$mail->send()) {
      return 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
      return "发送成功";
    }
};