php---邮件发送

                    使用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’,端口号同步为465
3、$this->mail->password = '******';这里不是邮箱的登录密码,而是授权码。
 
 

  

  

 

     

 

posted @ 2018-12-21 16:33  jujusmile  阅读(127)  评论(0编辑  收藏  举报