zoukankan      html  css  js  c++  java
  • php引入PHPMailer发送邮件

    昨天做了一个发送邮件的功能,如果直接用mail()函数,需要拥有自己的邮件服务器,所有引入PHPMailer类方便快捷,简单写一下开发步骤:

    一、拥有自己的邮箱账号(作为发件人邮箱)

      分两种情况:

      1、如果是企业邮箱,需要用到的参数为邮箱号和密码

      2、如果是个人邮箱,需要用到的参数为邮箱号和授权码(只有开启之后才能通过PHP代码,控制邮件的自动发送)

    二、PHPMailer的下载

      下载地址:https://github.com/PHPMailer/PHPMailer

      我这里是用的thinkphp 5,下载后放到vendor目录

    三、封装发送邮件方法,设置相关参数

     具体代码如下,这里我用的是企业邮箱,如果是个人邮箱,需更改以下几个参数值:

    $mail->Host,$mail->Port,发件人邮箱密码(授权码)

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2018/10/15 0015
     * Time: 13:33
     */
    
    namespace appcommonmodel;
    
    require VENDOR_PATH . 'PHPMailer/src/Exception.php';
    require VENDOR_PATH . 'PHPMailer/src/PHPMailer.php';
    require VENDOR_PATH . 'PHPMailer/src/SMTP.php';
    
    use PHPMailerPHPMailerPHPMailer;
    use PHPMailerPHPMailerSMTP;
    use PHPMailerPHPMailerException ;
    class Mail
    {
        //发件人邮箱
        private static $_fromAddress = '***@medpeer.cn';
        //发件人邮箱登录密码(非企业邮箱为授权码)
        private static $_pwd = '***';
        //收件人邮箱
        private static $_toAddress = '***@medpeer.cn';
    
        /**
         * 发送邮件
         * @author ZZ
         * @param string $fromAddress 发件人
         * @param string $pwd 发件人登录密码
         * @param string $toAddress 收件人
         * @param string $title 邮件题目
         * @param string $content 邮件内容
         * @return array
         */
        public function sendMail($title,$content,$toAddress = '',$fromAddress = '',$pwd = ''){
            if (empty($title) || empty($content)) {
                return ['result' => false, 'msg' => '参数错误'];
            }
            if (empty($fromAddress)) {
                $fromAddress = self::$_fromAddress;
                $pwd = self::$_pwd;
            }
            if (empty($toAddress)) {
                $toAddress = self::$_toAddress;
            }
            $mail = new PHPMailer();
            //告诉PHPMailer使用SMTP
            $mail->isSMTP();
            //启用S​​MTP调试
            // 0 =关闭(供生产使用)
            // 1 =客户端消息
            // 2 =客户端和服务器消息
            $mail->SMTPDebug = 2 ;
            //设置邮件服务器的主机名
            $mail->Host = 'smtp.exmail.qq.com';
            //使用
            // $ mail-> Host = gethostbyname('smtp.gmail.com');
            //如果您的网络不支持SMTP over IPv6
            //设置SMTP端口号 -  587用于经过身份验证的TLS,即RFC4409 SMTP提交
            $mail->Port = 465;
            //设置加密系统使用 -  ssl(不建议使用)或tls
            $mail->SMTPSecure = 'ssl';
            //是否使用SMTP身份验证
            $mail->SMTPAuth = true ;
            //用于SMTP身份验证的用户名 - 使用gmail的完整电子邮件地址
            $mail->Username = $fromAddress;
            //用于SMTP身份验证的密码(企业邮箱的话为登录密码)
            $mail->Password = $pwd;
            //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
            $mail->CharSet = 'UTF-8';
            //设置要从中发送消息的人员
            $mail->setFrom($fromAddress,'***');
            //设置备用回复地址
            //$mail->addReplyTo('***@qq.com','腾讯');
            //设置要将消息发送给谁
            $mail->addAddress($toAddress,'***');
            //设置主题行
            $mail->Subject = $title;
            //从外部文件中读取HTML邮件正文,将引用的图像转换为嵌入式图像
            //将HTML转换为基本的纯文本替代正文
            //$mail->msgHTML(file_get_contents(' contents.html '),__DIR__);
            //用手动创建的纯文本正文替换
            $mail->AltBody  = 'This is the body in plain text for non-HTML mail clients';
            $mail->Body  = $content;
            $result = $mail->send();
            if (!$result) {
                return ['result' => false, 'msg' => $mail->ErrorInfo];
            } else {
                return ['result' => true, 'msg' => '成功发送邮件消息'] ;
            }
        }
    }
    

      

  • 相关阅读:
    在Linux服务器上添加ip白名单允许ssh登录访问
    crontab + shell脚本实现文件重命名
    mysql数据库提示ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    附加题2:中文编程的发展角度
    附加题1:实体店的未来存在形式
    第八周作业
    第七周作业
    第六周作业
    第五周作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/zzeng347/p/9796542.html
Copyright © 2011-2022 走看看