php---邮件发送

馋奶兔 提交于 2019-12-20 00:57:58

                    使用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 = '******';这里不是邮箱的登录密码,而是授权码。
 
 

  

  

 

     

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!