使用
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','会议主题','今天下午开会'));
测试项目已上传,从这里下载