PHP中利⽤PHPMailer配合QQ邮箱实现发邮件
前⾔:
由于作业的需要,要实现给我们的⽹站⽤户发送邮件,于是就有了这篇博客。以下的内容是我结合⽹上的例⼦加上⾃⼰的实践的出来的。希望对⼤家有帮助。
PHPMailer的介绍:
优点:
1. 可运⾏在任何平台之上
2. ⽀持SMTP验证
3. 发送邮时指定多个收件⼈,抄送地址,暗送地址和回复地址;注:添加抄送、暗送仅win平台下smtp⽅式⽀持
4. ⽀持多种邮件编码包括:8bit,base64,binary和quoted-printable
php中header是什么意思5. ⽀持冗余SMTP服务器,即可以指定主smtp服务器地址也只可以指定备份smtp服务器
6. ⽀持带附件的邮件,可以为邮件添加任意格式的附件—当然得你的服务器有⾜够⼤的带宽⽀撑
7. ⾃定义邮件头信息,这跟php中通过header函数发送头信息类似
⽀持将邮件正⽂制作成HTMl内容,那么就可以在邮件正⽂中插⼊图
8. 灵活的debug⽀持
9. 经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等
PHPMailer的获取:
步骤⼀:使我们的QQ邮箱能够发送邮件
这⾥怎么说能够发送邮件呢?其实我们的邮箱都是可以发送邮件的,但是要实现在我们的⽹站中发送邮件,那就要设置⼀下我们的QQ邮箱了,因为此时我们的⽹站现在是作为⼀个第三⽅客户端存在的。
1. 由于待会我们⽤到的是SMTP服务器来发送,在这⾥建议把前⾯的两项开启了!当你点击开启的时候,它会提⽰:
当你完成以上步骤之后,就会得到⼀个授权码,你可以先复制出来,待会我们会⽤到(开启两项的话会得到两个授权码,⽤最后的那个授权码!或者点击下⾯的⽣成授权码来获取⼀个新的授权码,⼀定要最新的!)。
步骤⼆:使我们的PHP能够使⽤QQ邮箱发送邮件
PHPMailer需PHP的socket扩展⽀持,⽽PHPMailer链接qq域名邮箱时需要ssl加密⽅式,固php还得openssl的⽀持,可以查看phpinfo,如下两项均存在则可以使⽤,其中openssl版本号之类不⽤管;许多虚拟主机中的php是不⽀持openssl扩展的,那你可能就悲剧了。
步骤三:将PHPMailer做⼀定的处理
由于我们下载下来的PHPMailer⽂件夹⾥边的⽂件有很多我们是⽤不上的,所以我们也没必要浪费这些内存。我们可以对这个⽂件夹瘦⾝,在这⾥我只保存了以下的⼏个⽂件:class.phpmailer.php、class.phpmaileroauth.php、class.pop3.php、class.smtp.php、PHPMailerAutoload.php。
步骤四:编写发送邮件代码
在这⾥我是直接封装了⼀个公共的⽅法(写在 functions.php ⽂件中):
/*发送邮件⽅法
*@param $to:接收者 $title:标题 $content:邮件内容
*@return bool true:发送成功 false:发送失败
*/
function sendMail($to,$title,$content){
//引⼊PHPMailer的核⼼⽂件使⽤require_once包含避免出现PHPMailer类重复定义的警告
require_once("phpmailer/class.phpmailer.php");
require_once("phpmailer/class.smtp.php");
require_once("phpmailer/class.smtp.php");
//实例化PHPMailer核⼼类
$mail = new PHPMailer();
//是否启⽤smtp的debug进⾏调试开发环境建议开启⽣产环境注释掉即可默认关闭debug调试模式
$mail->SMTPDebug = 1;
//使⽤smtp鉴权⽅式发送邮件
$mail->isSMTP();
//smtp需要鉴权这个必须是true
$mail->SMTPAuth=true;
//链接qq域名邮箱的服务器地址
$mail->Host = 'smtp.qq';
//设置使⽤ssl加密⽅式登录鉴权
$mail->SMTPSecure = 'ssl';
//设置ssl连接smtp服务器的远程服务器端⼝号,以前的默认是25,但是现在新的好像已经不可⽤了可选465或587
$mail->Port = 465;
//设置smtp的helo消息头这个可有可⽆内容任意
// $mail->Helo = 'Hello smtp.qq Server';
//设置发件⼈的主机域可有可⽆默认为localhost 内容任意,建议使⽤你的域名
$mail->Hostname = 'www.lsgogroup';
//设置发送的邮件的编码可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->CharSet = 'UTF-8';
//设置发件⼈姓名(昵称)任意内容,显⽰在收件⼈邮件的发件⼈邮箱地址前的发件⼈姓名
$mail->FromName = 'LSGO实验室';
//smtp登录的账号这⾥填⼊字符串格式的qq号即可
$mail->Username ='12345678@qq';
//smtp登录的密码使⽤⽣成的授权码(就刚才叫你保存的最新的授权码)
$mail->Password = 'sqyofzbqlfkntbncl';
//设置发件⼈邮箱地址这⾥填⼊上述提到的“发件⼈邮箱”
$mail->From = '12345678@qq';
//邮件正⽂是否为html编码注意此处是⼀个⽅法不再是属性 true或false
$mail->isHTML(true);
//设置收件⼈邮箱地址该⽅法有两个参数第⼀个参数为收件⼈邮箱地址第⼆参数为给该地址设置的昵称不同的邮箱系统会⾃动进⾏处理变动这⾥第⼆个参数    $mail->addAddress($to,'lsgo在线通知');
//添加多个收件⼈则多次调⽤⽅法即可
// $mail->addAddress('xxx@163','lsgo在线通知');
//添加该邮件的主题
$mail->Subject = $title;
//添加邮件正⽂上⽅将isHTML设置成了true,则可以是完整的html字符串如:使⽤file_get_contents函数读取本地的html⽂件
$mail->Body = $content;
//为该邮件添加附件该⽅法也有两个参数第⼀个参数为附件存放的⽬录(相对⽬录、或绝对⽬录均可)第⼆参数为在邮件附件中该附件的名称
/
/ $mail->addAttachment('./d.jpg','mm.jpg');
//同样该⽅法可以多次调⽤上传多个附件
// $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
$status = $mail->send();
//简单的判断与提⽰信息
//简单的判断与提⽰信息
if($status) {
return true;
}else{
return false;
}
}
好了,现在我们调⽤该公共⽅法来测试⼀下,我要发送⼀篇邮件给 456789@qq 通知他顺利加⼊ LSGO 实验室
<?php
require_once("./functions.php");
$flag = sendMail('456789@qq','lsgo在线通知','恭喜你成功加⼊LSGO实验室,开启你的学习之旅吧!');
if($flag){
echo"发送邮件成功!";
}else{
echo"发送邮件失败!";
}
>
希望这篇博客能够帮到⼤家。
以上博客⼤部分是参考⾃