zoukankan      html  css  js  c++  java
  • 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 = '******';这里不是邮箱的登录密码,而是授权码。
     
     

      

      

     

         

  • 相关阅读:
    广播发送和接受者
    contentProvider 内容提供者
    自定义控件,开关左右滑动
    手指多点触控事件
    GO语言练习:第一个Go语言工程--排序
    GO语言练习:不定参数函数
    GO语言练习:多返回值函数
    GO语言练习:for基本用法
    GO语言练习:switch基本用法
    GO语言练习:map基本用法
  • 原文地址:https://www.cnblogs.com/lfjblog/p/10156604.html
Copyright © 2011-2022 走看看