首页>PHP下如何使用PHPMailer发送邮件详细配置方法

PHP下如何使用PHPMailer发送邮件详细配置方法

作者:xiaosong  日期:07-10
作为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码、通知信息等。比如:我的某个用户注册模块,需要使用register@jjonline.cn作为邮件发送人给注册用户发送一封包含账号激活链接的html格式的邮件,效验用户注册账号时填写的邮箱就是其本人的。

那么,PHP下这种使用自己的域名作为发送邮件的邮件地址的方法如何实现呢?

PHP环境下,是提供了发送邮件的函数mail()的,不过该函数要求服务器支持sendmail或者必须设置一台不需要中继的邮件发送服务器,但现在要找到一台不需要身份验证的邮件发送中继几乎不可能,所以使用mail函数往往无法成功发送电子邮件。那么php就无法发送邮件了么?答案是否定的,自己如果熟悉POP3/SMTP协议,结合socket功能就可以编写高效稳定的邮件发送程序,但这种变通方法相当于使用php编写了一个POP3/SMTP客户端了,对一般用户来说尚有难度。

PHPMailer有什么优点?

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

经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等


下面讲解自己使用qq邮箱并配合PHPMailer实现自动发送邮件的方法。 一、PHPMailer需要PHP开启socket扩展支持
1、打开php.ini配置文件,开启 extension=php_sockets.dll配置项;

注:PHPMailer连接qq邮箱时需要ssl加密方式,端口号需要配置成465(默认端口25),所以php还得开启openssl的支持,可以查看phpinfo,如下两项均存在则可以使用,其中openssl版本号之类不用管;

2、SSL连接方式需开启extension=php_openssl.dll配置项

许多虚拟主机中的php是不支持openssl扩展的,那你可能就悲剧了。
二、PHPMailer使用详细配置 //引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告  require_once("phpmailer/class.phpmailer.php");  //示例化PHPMailer核心类  $mail = new PHPMailer();  //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式  $mail->SMTPDebug = 1;  //使用smtp鉴权方式发送邮件,当然你可以选择pop方式 sendmail方式等 本文不做详解  //可以参考http://phpmailer.github.io/PHPMailer/当中的详细介绍  $mail->isSMTP();  $mail->SMTPAuth=true; //smtp需要鉴权 这个必须是true $mail->Host = 'smtp.qq.com'; //邮箱的服务器地址(qq邮箱为:smtp.qq.com) $mail->SMTPSecure = 'ssl'; //设置使用ssl加密方式登录鉴权  $mail->Port = 465;//端口号,默认25,ssl方式需要设置465或587 //设置smtp的helo消息头 这个可有可无 内容任意  $mail->Helo = 'Hello smtp.qq.com Server';  //设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名  $mail->Hostname = 'jjonline.cn';  //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码  $mail->CharSet = 'UTF-8';  //设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名  $mail->FromName = '代码学堂';  $mail->Username ='www.uxuew.cn';//smtp登录的账号 $mail->Password = 'xxxxxxx'; //smtp登录的密码 $mail->From = 'register@jjonline.cn'; //设置发件人邮箱地址 $mail->isHTML(true); //是否为html编码 注意此处是一个方法 不再是属性 true或false //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大  $mail->addAddress('xxx@qq.com','代码学堂用户');  //添加多个收件人 则多次调用方法即可  $mail->addAddress('xxx@163.com','代码学堂用户');  //添加该邮件的主题  $mail->Subject = 'PHPMailer发送邮件的示例';  //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件  $mail->Body = "这是一个PHPMailer发送邮件的一个测试用例";  //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称  $mail->addAttachment('./d.jpg','mm.jpg');  //同样该方法可以多次调用 上传多个附件  $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');  //发送命令 返回布尔值  //PS:经过测试,要是收件人不存在,若不出现错误依然返回true 也就是说在发送之前 自己需要些方法实现检测该邮箱是否真实有效  $status = $mail->send();  //简单的判断与提示信息  if($status) {  echo '发送邮件成功';  }else{  echo '发送邮件失败,错误信息未:'.$mail->ErrorInfo;  }  ?> ​​​​​​​ 特别提示:上述代码段仅作参考,若要集成到网站系统中,则可以将代码段封装成函数或类库进行调用;
web前端|正则|JSP教程|ASP教程|
ajax教程|jquery教程|css教程|服务器|
操作系统|linux系统|SEO优化|网站运维|
织梦cms|javascript教程|html教程|编程开发|
php开发|数据库|Mysql教程|CMS建站教程|
phpcms教程|wordpress|apache服务器|
代码学堂-导航