php实现邮箱发送功能tp5框架

admin 发布于 ThinkPhp

网站开发中经常用到邮件发送功能,比如发送验证码、修改密码或者推送最新消息等等,由于他是免费使用的功能,所以在网站中经常遇到。这结课我们就给大家介绍下TP5如何发送邮件。

邮件可以利用php的smtp类来发邮件,大家可以尝试下,但是在tp5中建议大家用phpmailer来实现邮件发送。实现方式如下:

1、下载phpmailer

Tp5可以利用composer下载或者直接下载安装包,这里直接将安装包给大家!

下载地址:https://pan.baidu.com/s/1HPUJFTyPlg4a7TK7YWySOg

2、将phpmailer解压好后直接放到extend中

3、在application中新建一个公用的控制器,然后创建一个sendmail类文件:代码如下

<?php
namespace app\index\controller;
use think\Controller;
use think\Exception;
use think\Loader;
class SendEmail extends Controller
{
    /**
     * 发送邮件
     * @param $host [SMTP地址]
     * @param $send_email [发送邮箱账号]
     * @param $pwd [发送邮箱密码]
     * @param $to [接收邮箱账号]
     * @param $title [邮件标题]
     * @param $content [邮件内容]
     * @param $file [邮件附件]
     * @return bool
     * @throws \Exception
     */
    public function sendMail( $to, $title, $content){
        //实例化PHPMailer核心类
    Loader::import('PHPMailer.src.PHPMailer',EXTEND_PATH,'.php');
        Loader::import('PHPMailer.src.SMTP',EXTEND_PATH,'.php');
        $mail = new \PHPMailer();
        //是否启用smtp的debug进行调试 开发环境建议开启默认为关闭
        $mail->SMTPDebug = 2;
        //使用smtp鉴权方式发送邮件
        $mail->isSMTP();
        //smtp需要鉴权 这个必须是true
        $mail->SMTPAuth=true;
        //SMTP地址
        $mail->Host = 'smtp.163.com';
        //设置使用ssl加密方式登录鉴权
        $mail->SMTPSecure = 'ssl';
        //设置ssl连接smtp服务器的远程服务器端口号
        $mail->Port = 465;
        // $mail->Helo = 'Hello smtp.qq.com Server';
        //发件人的主机域默认为localhost 内容任意,建议使用您的域名
        //$mail->Hostname = 'localhost';
        //设置发送的邮件的编码 
        $mail->CharSet = 'UTF-8';
        //设置发件人姓名 任意内容
        $mail->FromName = '英特网络';
        //smtp登录的账号 这里填入字符串格式邮箱账号的即可
        $mail->Username = "intewl@163.com";
        //smtp登录的密码 (部分邮箱为授权码)
        $mail->Password = "";
        //设置发件人邮箱地址
        $mail->From = "intewl@163.com";
        //邮件正文是否为html编码
        $mail->isHTML(true);
        //收件人邮箱地址 参数一为邮箱地址 参数二为给该地址设置的昵称
        $mail->addAddress($to,'英特网络');//重复调用可添加多个收件人
        //邮件标题
        $mail->Subject = $title;
        //邮件正文 若isHTML设置为true,则可是完整的html字符串 (可用file_get_contents函数读取本地的html文件)
        $mail->Body = $content;
        //添加附件 参数一为附件存放的目录 参数二为在邮件附件名称
        try{
            //发送邮件
            $status = $mail->send();
        }
        catch (Exception $e){
            echo $e->getMessage();
        }
        //返回结果
        return $status?true:false;
    }
    }

在其他需要用到发送邮件的地方使用,使用方法先创建类,然后调用sendMail函数

public function sendMail(){
    $mail=new SendEmail();
    $res=$mail->sendMail( 'zykczm@qq.com', "英特网络", "您的验证码是");
    dump($res);
}

注意事项:

1、邮件发送功能首先需要发送邮箱的账号开通pop3/smtp或者imap/smtp功能。

2、sendMail中邮箱账号密码等可以自行提取到函数参数中,以便后台对参数进行管理

3、最后使用sendMail函数是,$title和$content的内容用较真实内容替换,在测试中,将$title写成‘111’,$content写成‘1111’,会出现554错误,发生原因内容太简单有些邮箱判断是垃圾内容。

4、Smtp服务器远程端口号不同邮箱不同端口,可以百度搜下

824浏览量 · 2评论 · 2018-11-12 10:23:00

全部评论  2

  • intewl2019-10-11 15:31:21

    很好,终于可以用邮箱来注册账号了!

  • zykczm2019-10-11 15:34:20

    ok,很不错,谢谢分享。

注册登录 进行评论

热门专题

更多专题