在 PHP 应用开发中,往往需要验证用户邮箱、发送消息通知,而使用 PHP 内置的 mail() 函数,则需要邮件系统的支持。
如果熟悉 IMAP/SMTP 协议,结合 Socket 功能就可以编写邮件发送程序了,不过开发这样一个程序并不容易。
好在 PHPMailer 封装的足够强大,使用它可以更加便捷的发送邮件,免去了我们很多额外的麻烦。
PHPMailer
PHPMailer 是一个封装好的 PHP 邮件发送类,支持发送 HTML 内容的电子邮件,以及可以添加附件发送,并不像 PHP 本身 mail() 函数需要服务器环境支持,您只需要设置邮件服务器以相关信息就能实现邮件发送功能。
【 PHP扩展支持 】
PHPMailer 需要 PHP 的 sockets 扩展支持,而登录 QQ 邮箱 SMTP 服务器则必须通过 SSL 加密,故 PHP 还得包含 openssl 的支持。
↑ 使用 phpinfo() 函数查看 socket 和 openssl 扩展信息(wamp server 默认启用了该扩展)。
【 PHPMailer 核心文件 】
↑ 在本文中只需要 class.phpmailer.php 和 PHPMailer/class.smtp.php。
QQ 邮箱设置
所有的主流邮箱都支持 SMTP 协议,但并非所有邮箱都默认开启,您可以在邮箱的设置里面手动开启。
第三方服务在提供了账号和密码之后就可以登录 SMTP 服务器,通过它来控制邮件的中转方式。
【 开启 SMTP 服务 】
↑ 选择 IMAP/SMTP 服务,点击开启服务。
【 验证密保 】
↑ 发送短信“配置邮件客户端”至1069-0700-69。
【 获取授权码 】
↑ SMTP 服务器认证密码,需要妥善保管(PS:密码之间没有空格)。
PHP发送邮件
【 基本代码 】
下面的代码演示了 PHPMailer 的使用方法,注意 PHPMailer 实例的配置过程。//引入PHPMailer的核心文件
require_once("PHPMailer/class.phpmailer.php");
require_once("PHPMailer/class.smtp.php");
//实例化PHPMailer核心类
$mail=newPHPMailer();
//是否启用smtp的debug进行调试开发环境建议开启***环境注释掉即可默认关闭debug调试模式
$mail->SMTPDebug=1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权这个必须是true
$mail->SMTPAuth=true;
//链接qq域名邮箱的服务器地址
$mail->Host='';
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure='ssl';
//设置ssl连接smtp服务器的远程服务器端口号
$mail->Port=465;
//设置发送的邮件的编码
$mail->CharSet='UTF-8';
//设置发件人昵称显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName='发件人昵称';
//smtp登录的账号QQ邮箱即可
$mail->Username='12345678@';
//smtp登录的密码使用生成的授权码
$mail->Password='**********';
//设置发件人邮箱地址同登录账号
$mail->From='12345678@';
//邮件正文是否为html编码注意此处是一个方法
$mail->isHTML(true);
//设置收件人邮箱地址
$mail->addAddress('87654321@');
//添加多个收件人则多次调用方法即可
$mail->addAddress('87654321@');
//添加该邮件的主题
$mail->Subject='邮件主题';
//添加邮件正文
$mail->Body='
HelloWorld
';//为该邮件添加附件
$mail->addAttachment('./example.pdf');
//发送邮件返回状态
$status=$mail->send();
【 封装方法 】
如果要直接使用 PHPMailer 发送邮件,则需要进行繁琐的配置,这样做多少会降低效率。
为了简化调用过程,我在其基础上进行了二次封装,只需要配置账号、密码和昵称,就可以定制你自己的 QQMailer 类了。<?php
require_once'PHPMailer/class.phpmailer.php';
require_once'PHPMailer/class.smtp.php';
classQQMailer
{
publicstatic$HOST='';//QQ邮箱的服务器地址
publicstatic$PORT=465;//smtp服务器的远程服务器端口号
publicstatic$SMTP='ssl';//使用ssl加密方式登录
publicstatic$CHARSET='UTF-8';//设置发送的邮件的编码
privatestatic$USERNAME='123456789@';//授权登录的账号
privatestatic$PASSWORD='****************';//授权登录的密码
privatestatic$NICKNAME='woider';//发件人的昵称
/**
*QQMailerconstructor.
*@parambool$debug[调试模式]
*/
publicfunction__construct($debug=false)
{
$this->mailer=newPHPMailer();
$this->mailer->SMTPDebug=$debug?1:0;
$this->mailer->isSMTP();//使用SMTP方式发送邮件
}
/**
*@returnPHPMailer
*/
publicfunctiongetMailer()
{
return$this->mailer;
}
privatefunctionloadConfig()
{
/*ServerSettings*/
$this->mailer->SMTPAuth=true;//开启SMTP认证
$this->mailer->Host=self::$HOST;//SMTP服务器地址
$this->mailer->Port=self::$PORT;//远程服务器端口号
$this->mailer->SMTPSecure=self::$SMTP;//登录认证方式
/*AccountSettings*/
$this->mailer->Username=self::$USERNAME;//SMTP登录账号
$this->mailer->Password=self::$PASSWORD;//SMTP登录密码
$this->mailer->From=self::$USERNAME;//发件人邮箱地址
$this->mailer->FromName=self::$NICKNAME;//发件人昵称(任意内容)
/*ContentSetting*/
$this->mailer->isHTML(true);//邮件正文是否为HTML
$this->mailer->CharSet=self::$CHARSET;//发送的邮件的编码
}
/**
*Addattachment
*@param$path[附件路径]
*/
publicfunctionaddFile($path)
{
$this->mailer->addAttachment($path);
}
/**
*SendEmail
*@param$email[收件人]
*@param$title[主题]
*@param$content[正文]
*@returnbool[发送状态]
*/
publicfunctionsend($email,$title,$content)
{
$this->loadConfig();
$this->mailer->addAddress($email);//收件人邮箱
$this->mailer->Subject=$title;//邮件主题
$this->mailer->Body=$content;//邮件信息
return(bool)$this->mailer->send();//发送邮件
}
}
require_once'QQMailer.php';
//实例化QQMailer
$mailer=newQQMailer(true);
//添加附件
$mailer->addFile('0VL.jpg');
//邮件标题
$title='愿得一人心,白首不相离。';
//邮件内容
$content=<<
皑如山上雪,皎若云间月。
闻君有两意,故来相决绝。
今日斗酒会,明旦沟水头。
躞蹀御沟上,沟水东西流。
凄凄复凄凄,嫁娶不须啼。
愿得一人心,白首不相离。
竹竿何袅袅,鱼尾何簁簁!
男儿重意气,何用钱刀为!
EOF;
//发送QQ邮件
$mailer->send('123456789@',$title,$content);
【 测试结果 】
如果觉得《php通过qq邮箱发送邮件 PHP 利用QQ邮箱发送邮件「PHPMailer」》对你有帮助,请点赞、收藏,并留下你的观点哦!