使用 PHPMailer 配合 QQ邮箱 发送邮件

时间:2022-09-24 20:40:12

使用php来进行邮件的发送,有很多种方法。
可以通过php内置的函数mail(),但是使用mail()函数发送邮件就必须要有一台无需SMTP验证就可以发信的邮件服务器。而现在的SMTP邮件服务器基本上都是需要验证的,所以要想使用它发邮件就只能自己在本地搭一个不需要验证的SMTP服务器,这就比较麻烦了,不过优点在于,配置好了之后,使用起来比较简单。
如果不想麻烦,或是没有SMTP服务器,那么可以借助第三方的邮件服务器,例如 163、qq等,QQ邮箱想必绝大多数人都有,所以介绍使用QQ邮箱来发送邮件的具体过程,亲测有效。


PHPMailer的介绍:

优点:

可运行在任何平台之上
支持SMTP验证
发送邮时指定多个收件人,抄送地址,暗送地址和回复地址;注:添加抄送、暗送仅win平台下smtp方式支持
支持多种邮件编码包括:8bit,base64,binary和quoted-printable
支持冗余SMTP服务器,即可以指定主smtp服务器地址也只可以指定备份smtp服务器
支持带附件的邮件,可以为邮件添加任意格式的附件—当然得你的服务器有足够大的带宽支撑
自定义邮件头信息,这跟php中通过header函数发送头信息类似
支持将邮件正文制作成HTMl内容,那么就可以在邮件正文中插入图

灵活的debug支持
经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange

PHPMailer的获取:https://github.com/PHPMailer/PHPMailer,直接使用Git将整个项目克隆下来,如果没有Git,选择Download ZIP,下载下来一个 ZIP压缩包,然后解压就行,当前的版本号是5.2.22

使用 PHPMailer 配合 QQ邮箱 发送邮件

1. 确保php环境具有php_openssl.dll并且开启

php服务器开启后,访问phpinfo.php这个文件,如果能找到如下一项,则表明已经存在并开启了php_openssl.dll扩展:

使用 PHPMailer 配合 QQ邮箱 发送邮件

如果没有,则必须手动开启,首先检查php.ini中;extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符, 如果不存在这行,那么添加extension=php_openssl.dll,然后检查ext目录下是否存在php_openssl.dll这个文件,如果有那就没事了,如果没有,则需要到网上或是其他地方下载下来,放到这个目录里。
如果还有问题可以看下这里 http://www.haorooms.com/post/php_openssl

2. 开启QQ邮箱的 SMTP服务

进入 qq邮箱,点击“设置”:

使用 PHPMailer 配合 QQ邮箱 发送邮件

切换到“账户”标签:

使用 PHPMailer 配合 QQ邮箱 发送邮件

开启 POP3/SMTP服务,使用手机发送一条验证短信就行了,我这里已经开启好了

使用 PHPMailer 配合 QQ邮箱 发送邮件

点击“生成授权码”,应该还会让你发一条验证短信,验证完成之后页面上就会出现一个 16的位授权码,这个才是最终想要得到的东西,可以先记下来:

使用 PHPMailer 配合 QQ邮箱 发送邮件

3. 进入正题

前期准备工作做好之后,就可以着手将 QQ邮箱和PHPMailer配合起来了。
新建一个测试文件,例如就叫PHPMailer_test.php,然后再其中加入下面的代码:

<?php
/*发送邮件方法 *@param $to:接收者 $title:标题 $content:邮件内容 *@return bool true:发送成功 false:发送失败 */
function sendMail($to,$title,$content) {
    // 这个PHPMailer 就是之前从 Github上下载下来的那个项目
    require './PHPMailer/PHPMailerAutoload.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 = '9019208392@qq.com';                 
    // 这个就是之前得到的授权码,一共16位
    $mail->Password = 'smegbvpsssmddcfi';     
    //设置使用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('9019208392@qq.com', 'send_user_name');
    // $to 为收件人的邮箱地址,如果想一次性发送向多个邮箱地址,则只需要将下面这个方法多次调用即可
    $mail->addAddress($to);
    //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
    $mail->isHTML(true);
    // 该邮件的主题
    $mail->Subject = $title;
    // 该邮件的正文内容
    $mail->Body = $content;
    //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
    // $mail->addAttachment('./d.jpg','mm.jpg');
    //同样该方法可以多次调用 上传多个附件
    // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');

    // 使用 send() 方法发送邮件
    if(!$mail->send()) {
      return 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
      return "\nMessage has been sent";
    }
}

// 调用发送方法,并在页面上输出发送邮件的状态
var_dump(sendMail('4819283873@qq.com','会议主题','今天下午开会'));

测试项目已上传,从这里下载