ThinkPHP5结合phpmailer发送邮件

1.安装composer

2.设置composer为全局变量

3.进入项目目录

4.在命令行执行:composer require phpmailer/phpmailer

5.创建Test.controller控制器文件,代码如下:

<?php
/**
 * Created by PhpStorm.
 * User: dyane
 * Date: 2019/3/29
 * Time: 16:38
 */

namespace app\system_admin\controller;

use think\Request;

class Test
{
    /**
     * 邮件发送页面
     * @return mixed
     */
    public function index()
    {
        return view('email/index');
    }

    /**
     * 发送邮件
     */
    public function send()
    {
        if($this->request->isPost()) {
            $param = $this->request->param();
            //判断收件人
            if (empty($param['addressee'])) {
                return json(['code' => 400, 'msg' => '收件人地址不能为空!']);
                die;
            }
            //判断邮件主题和内容必须存在一个
            if (empty($param['title']) && empty($param['content'])) {
                return json(['code' => 400, 'msg' => '主题和内容必须填写一个!']);
                die;
            }
            //获取收件人地址
            $addressee = $param['addressee'];
            //验证邮箱
            $addressee = $this->checkEmailStr($addressee);
            //获取主题或内容
            if (!empty($param['title'])) {
                $title = htmlspecialchars($param['title']);
            } else {
                $title = ' ';
            }//空格不能去,否则发送失败
            if (!empty($param['content'])) {
                $content = $param['content'];
            } else {
                $content = ' ';
            }//空格不能去,否则发送失败
            //获取抄送人地址
            if (!empty($param['copyperson'])) {
                $copyerArray = $this->checkEmailStr($param['copyperson']);
            } else {
                $copyerArray = '';
            }
            //获取密送人地址
            if (!empty($param['secretagent'])) {
                $sercreterArray = $this->checkEmailStr($param['secretagent']);
            } else {
                $sercreterArray = '';
            }
            //获取附件
            if (!empty($param['files_list'])) {
                $filesArray = $this->checkFiles($param['files_list']);
            } else {
                $filesArray = '';
            }
            $res = $this->sendEmail($addressee,$copyerArray,$sercreterArray,$filesArray,$title,$content);
            //反馈发送结果
           if($res){
                 if (!empty($filesArray)) {
                    $this->deleteOldEmaileFiles($filesArray);
                }
                echo json_encode(['code' => 200, 'msg' => '发送成功!']);die;
            }else{
                echo json_encode(['code' => 400, 'msg' => '发送失败!']);die;
            }
        }
    }
    /**
     * 发送邮件
     * @param $addressee
     * @param $copyerArray
     * @param $sercreterArray
     * @param $filesArray
     * @param $title
     * @param $content
     */
    protected function sendEmail($addressee,$copyerArray,$sercreterArray,$filesArray,$title,$content)
    {
        //使用发送邮件类
        $mail = new EmailYX();
        //设置收件人
        $mail->setManyAddressee($addressee);

        if(!empty($copyerArray)){$mail->setManyCC($copyerArray);}

        if(!empty($sercreterArray)){$mail->setManyBCC($sercreterArray);}

        if(!empty($filesArray)){$mail->setManyAttachment($filesArray);}
        //设置主题和内容
        $mail->setContent($title,$content);
        //发送邮件
        $res = $mail->send();
        return $res;
    }

    /**
     * 发送成功之后删除附件文件
     * @param $filesArray
     */
    protected function deleteOldEmaileFiles($filesArray)
    {
            foreach ($filesArray as $key => $value){
                $path = ROOT_PATH . 'public'.$value;
                if(file_exists($path)){
                    unlink($path);
                }
            }
    }

    /**
     * 验证邮箱是否正确
     * @param $str
     */
    protected function checkEmailStr($emailStr)
    {
        $toArray = explode(',',$emailStr);
        $res = $this->checkManyEmail($toArray);
        return $res;
    }
    /**
     * 判断多组字符窜邮箱是否有不正确的邮箱存在
     * @param $toArray
     * @return bool
     */
    protected function checkManyEmail($toArray)
    {
        foreach ($toArray as $key => $value){
            $check = $this->checkEmail($value);
            if(!$check){unset($toArray[$key]);}
        }
        return $toArray;
    }
    /**
     * 正则验证邮箱是否合法
     * @param $email
     * @return false|int
     */
    protected function checkEmail($email)
    {
//        $pregEma
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP5中,可以使用Redis或者AMQP作为消息队列。下面以Redis为例,介绍如何使用消息队列。 1. 安装Redis 在使用Redis作为消息队列之前,需要先安装Redis。可以参考官方文档进行安装。安装完成后,确保Redis服务已经启动。 2. 配置消息队列 打开config/queue.php文件,进行配置。将默认的sync改为redis,并配置Redis的连接信息,如下所示: ```php return [ // 默认使用的队列连接 'default' => env('queue.driver', 'redis'), // 队列连接信息 'connections' => [ 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, 'block_for' => null, ], ], ]; ``` 3. 创建任务 在app\job目录下创建一个任务类,例如TestJob.php,示例代码如下: ```php <?php namespace app\job; class TestJob { public function fire($job, $data) { // 处理任务 echo '处理任务:' . json_encode($data) . PHP_EOL; // 删除任务 $job->delete(); } } ``` 4. 添加任务到队列 在控制器或其他地方添加任务到队列中,示例代码如下: ```php <?php namespace app\index\controller; use think\Controller; use think\Queue; class Index extends Controller { public function index() { // 添加任务到队列 $jobHandlerClassName = 'app\job\TestJob'; // 任务的类名 $jobData = ['uid' => 1, 'title' => '测试任务']; // 任务数据 $queueName = 'test'; // 队列名称 Queue::push($jobHandlerClassName, $jobData, $queueName); } } ``` 5. 执行队列任务 使用命令行执行队列任务,示例代码如下: ``` php think queue:work --queue test ``` 其中test为队列名称,可以根据实际情况修改。 执行成功后,会输出处理任务的日志信息。 以上就是使用Redis作为消息队列的基本流程,如果需要使用AMQP,可以参考ThinkPHP5官方文档进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值