使用PHPMailer发送邮件
1、发送邮件的邮箱地址的设置:需要开通POPS/SMTP服务
以QQ为例:设置---账户---开启服务--选择IMAP/SMTP服务,点击开启服务
开启服务过程会“获取授权码”,即SMTP服务器验证密码,请妥善保管。
2、php需要设置配置项
PHPMailer需要PHP的sockets扩展支持,而登录QQ邮箱SMTP服务器必须通过SSL加密,所以php需要openssl的支持。
extension=php_openssl.dll
extension=php_sockets.dll
设置完之后可以使用phpinfo()函数查看socket和openssl扩展信息。
3、下载:https://github.com/PHPMailer/PHPMailer
使用命令:git clone https://github.com/PHPMailer/PHPMailer.git
4、使用CI框架说明
(1)将插件放在CI框架的libraries目录下,在目录libraries先新建Mailer.php类文件
(2)创建的Mailer.php类文件内容
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed'require_once('/src/class.phpmailer.php');
class Mailer{ public $mail; public function __construct() { //示例化PHPMailer核心类 $this->mail = new PHPMailer(); //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式 1 开启 0 关闭 $this->mail->SMTPDebug = 0; //使用smtp鉴权方式发送邮件,当然你可以选择pop方式 sendmail方式等 本文不做详解 //可以参考https://phpmailer.github.io/PHPMailer/当中的详细介绍 $this->mail->isSMTP(); //smtp需要鉴权 这个必须是true $this->mail->SMTPAuth=true; //链接qq域名邮箱的服务器地址 $this->mail->Host = 'smtp.qq.com'; //加密方式:ssl和tls,设置使用ssl加密方式登录鉴权,QQ邮箱发送使用的是ssl $this->mail->SMTPSecure = 'ssl'; //设置ssl连接smtp服务器的远程服务器端口号 可选465或587 $this->mail->Port = 465; //设置smtp的helo消息头 这个可有可无 内容任意 $this->mail->Helo = 'Hello smtp.qq.com Server'; //设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名 //$this->mail->Hostname = 'jjonline.cn'; //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码 $this->mail->CharSet = 'UTF-8'; //设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名 $this->mail->FromName = '叮当小仙'; //smtp登录的账号 这里填入字符串格式的qq号即可 $this->mail->Username ='123456789@qq.com'; //smtp登录的密码 这里填入“独立密码” 若为设置“独立密码”则填入登录qq的密码 建议设置“独立密码” $this->mail->Password = '*********'; //设置发件人邮箱地址 这里填入上述提到的“发件人邮箱” $this->mail->From = '123456789@qq.com'; //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false /*$this->mail->isHTML(true); //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大 $this->mail->addAddress('xxx@qq.com','晶晶在线用户'); //添加多个收件人 则多次调用方法即可 $this->mail->addAddress('xxx@163.com','晶晶在线用户'); //添加该邮件的主题 $this->mail->Subject = 'PHPMailer发送邮件的示例'; //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件 $this->mail->Body = "这是一个<b style=\"color:red;\">PHPMailer</b>发送邮件的一个测试用例"; //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称 $this->mail->addAttachment('./d.jpg','mm.jpg'); //同样该方法可以多次调用 上传多个附件 $this->mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');*/ } /** * @param $to * @param $to_name * @param $subject * @param $body * 发送邮件 */ public function sendmail($to, $to_name, $subject, $body){ try{ //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false $this->mail->isHTML(true); //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大 //添加多个收件人 则多次调用方法即可 $this->mail->AddAddress($to, $to_name); //添加邮件的主题(标题) $this->mail->Subject = $subject; //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件 $this->mail->Body = $body; //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称 //$this->mail->addAttachment('images/4.jpg','head.jpg'); //同样该方法可以多次调用 上传多个附件 //$this->mail->addAttachment('upload/test2.xlsx','表格.xlsx'); $status = $this->mail->Send(); if($status){ //发送成功 return true; }else{ //发送失败 return false; } } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } }}(3)保留的文件:src目录下的文件都可以保留,想改变文件名自己随自己喜欢。我自己把文件名字改成了上面截图中的名字。同时请注意在class.phpmailer.php文件中有一点需要注意,找到$this->smtp = new SMTP();在其上面添加require_once('class.smtp.php');防止文件类初始化失败。
(4)控制器里面可以直接加载上面创建的Mailer.php文件,组合发送的信息,发送邮件
public function sendMsg(){ //加载扩展 $this->load->library('PHPMailer/Mailer','mailer'); $toEmail = '12345678@163.com'; $toName = '叮当'; $subject = 'Nice to you'; $body = " <b>你好呀!!</b>"; $ret = $this->mailer->sendMail($toEmail,$toName, $subject, $body); if($ret){ $res = array('rc' => 0,'msg' => '发送成功'); echo json_encode($res); exit; }else{ $res = array('rc' => 1,'msg' => '发送失败'); echo json_encode($res); exit; }}注意点:1、PHP必须开启扩展2、$this->mail->SMTPSecure = 'ssl';$this->mail->Port = 465;如果是QQ邮箱发送邮件,必须设置‘ssl’,端口号同步为4653、$this->mail->password = '******';这里不是邮箱的登录密码,而是授权码。
来源:https://www.cnblogs.com/lfjblog/p/10156604.html