首页 > 编程 > PHP > 正文

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

2019-11-08 02:17:47
字体:
来源:转载
供稿:网友

使用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

这里写图片描述

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

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

这里写图片描述

如果没有,则必须手动开启,首先检查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邮箱,点击“设置”:

这里写图片描述

切换到“账户”标签:

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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','会议主题','今天下午开会'));

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


上一篇:php :可笑的重载

下一篇:编译安装PHP

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表