PHP下利用PHPMailer配合QQ邮箱发送邮件

2019年4月17日 0 条评论 123 次阅读 1 人点赞

一、首先我们将PHPemail的源码通过github下载到本地,然后上传服务器,在服务器端也可以通过git命令进行获取源代码,github源码地址为:

https://github.com/PHPMailer/PHPMailer

二、我们此处使用qq邮箱作为例子

首先我们登陆qq邮箱

点击左上角的设置,然后选择到账户一栏,找到如图所示一栏目,将以上服务全部开启,开启过程中需要验证密保或者qq令牌,成功开启后会向你展示一个授权码,此处我们并不需要授权码,用的时候再进行生成即可!

三、服务器环境要求(此处为重点)

PHPMailer需PHP的socket扩展支持,而PHPMailer链接qq域名邮箱时需要ssl加密方式(qq邮箱最近做了限制,新开域名邮箱不再允许通过smtp协议的25端口的普通链接方式链接,只允许ssl的465或587端口[我的一个域名邮箱内测期开通的域名邮箱目前25端口还是可以链接的,可能是安全策略,限制了新开域名邮箱账户的25端口]),固php还得openssl的支持,可以查看phpinfo,如下两项均存在则可以使用,其中openssl版本号之类不用管;许多虚拟主机中的php是不支持openssl扩展的!


phpinfo的写法也给你们说一下

<?php
phpinfo();
?>


四、调用封装的类,并且使用,如以下代码所示: 

     /*发送邮件方法
     *@param $to:接收者 $title:标题 $content:邮件内容
     *@return bool true:发送成功 false:发送失败
     */
     
    function sendMail($to,$title,$content){ 
   
    //引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告
    require_once("phpmailer/class.phpmailer.php"); 
    require_once("phpmailer/class.smtp.php");    
    
    //实例化PHPMailer核心类
    $mail = new PHPMailer();   
     
    //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
    $mail->SMTPDebug = 1;    
    
    //使用smtp鉴权方式发送邮件
    $mail->isSMTP();    
    
    //smtp需要鉴权 这个必须是true
    $mail->SMTPAuth=true;    
    
    //链接qq域名邮箱的服务器地址
    $mail->Host = 'smtp.qq.com';    
    
    //设置使用ssl加密方式登录鉴权
    $mail->SMTPSecure = 'ssl';    
    
    //设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
    $mail->Port = 465;    
    
    //设置smtp的helo消息头 这个可有可无 内容任意
    // $mail->Helo = 'Hello fanerblog';

    //设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
    $mail->Hostname = 'localhost';   
     
    //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
    $mail->CharSet = 'UTF-8';    
    
    //设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
    $mail->FromName = '犯二青年博客';    
    
    //smtp登录的账号 这里填入字符串格式的qq号即可
    $mail->Username ='123456789@qq.com';    
    
    //smtp登录的密码 使用生成的授权码(就刚才叫你保存的最新的授权码)
    $mail->Password = 'sqyofzbqlfkntbncl';    
    
    //设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
    $mail->From = '123456789@qq.com';    
    
    //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
    $mail->isHTML(true); 

    //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
    $mail->addAddress($to,'犯二青年博客评论回复通知');  
      
    //添加多个收件人 则多次调用方法即可
    // $mail->addAddress('xxx@163.com','犯二青年博客评论回复通知');

    //添加该邮件的主题
    $mail->Subject = $title;    
    
    //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
    $mail->Body = $content;    
    
    //为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
    // $mail->addAttachment('./d.jpg','mm.jpg');
    
    //同样该方法可以多次调用 上传多个附件
    // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');

    $status = $mail->send();    //简单的判断与提示信息
    if($status) {        return true;
    }else{        return false;
    }
}

以上代码为调试所用封装,效果图如下:

下来给大家看看如何在thinkPHP中使用PHPemail!

    function send_email($address,$subject,$content){
    $email_smtp=C('EMAIL_SMTP');
    $email_username=C('EMAIL_USERNAME');
    $email_password=C('EMAIL_PASSWORD');
    $email_from_name=C('EMAIL_FROM_NAME');
    if(empty($email_smtp) || empty($email_username) || empty($email_password) || empty($email_from_name)){
        return array("error"=>1,"message"=>'邮箱配置不完整');
    }
    
    require './ThinkPHP/Library/Org/Bjy/class.phpmailer.php';
    require './ThinkPHP/Library/Org/Bjy/class.smtp.php';
    
    $phpmailer=new \Phpmailer();
    
    // 设置PHPMailer使用SMTP服务器发送Email
    $phpmailer->IsSMTP();
    
    // 设置为html格式
    $phpmailer->IsHTML(true);
    
    // 设置邮件的字符编码'
    $phpmailer->CharSet='UTF-8';
    
    //设置使用ssl加密方式登录
    $phpmailer->SMTPSecure='ssl';
	
    //设置ssl连接stmp服务器端口号
    $phpmailer->Port=465;
	
    // 设置SMTP服务器。
    $phpmailer->Host=$email_smtp;
    
    // 设置为"需要验证"
    $phpmailer->SMTPAuth=true;
    
    // 设置用户名
    $phpmailer->Username=$email_username;
    
    // 设置密码
    $phpmailer->Password=$email_password;
    
    // 设置邮件头的From字段。
    $phpmailer->From=$email_username;
    
    // 设置发件人名字
    $phpmailer->FromName=$email_from_name;
    
    // 添加收件人地址,可以多次使用来添加多个收件人
    $phpmailer->AddAddress($address);
    
    // 设置邮件标题
    $phpmailer->Subject=$subject;
    
    // 设置邮件正文
    $phpmailer->Body=$content;

    // 发送邮件。
    if(!$phpmailer->Send()) {
        $phpmailererror=$phpmailer->ErrorInfo;
        return array("error"=>1,"message"=>$phpmailererror);
    }else{
        return array("error"=>0);
    }
}

总结一下:总的来说语法配置是差不多的,只不过是在thinkPHP中我使用的是变量,在后台新增了一个定义界面,这样可以更改我的SMTP邮箱,需要注意的是下载下来的源码是一个类,我们需要去require调用他,至于是使用require还是require_once根据你们的自身情况来定,此处我是封装了一个公共的方法,调用直接使用send_email即可,至于更多写法我就不一一介绍了,如有疑问可在文章下方留言!

梁桂锋

来自西京学院大三的小开发者。

文章评论(0)