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