群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。

一、邮件发送父类

在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php,代码如下

复制代码
<?php
/**
 * 邮件发送父类
 * User: 龙哥·三年风水
 * Date: 2024/12/5
 * Time: 14:22
 */
namespace Mail;
interface MailSenderInterface
{
    /**
     * 单个邮件发送
     * User: 龙哥·三年风水
     * Date: 2024/12/5
     * Time: 14:29
     * @ param $emailSubject 邮件主题
     * @ param $emailContent 邮件内容
     * @ param string $emailAttachment 邮件附件
     * @ return mixed
     */

    public static function send($emailSubject, $emailContent, $emailAttachment = '');
}

二、具体类实现

在Mail目录下创建文件夹并命名为channel,然后在channel文件夹下,创建QQ邮件发送类、网易邮件发送类等,代码如下

复制代码
<?php
/**
 * 腾讯QQ邮件发送类
 * User: 龙哥·三年风水
 * Date: 2024/12/5
 * Time: 15:21
 */
namespace Mail\channel;
use Mail\MailSenderInterface;
class QqMailSender implements MailSenderInterface
{

    public function __construct($param){

    }

    /**
     * 单个邮件发送
     * User: 龙哥·三年风水
     * Date: 2024/12/5
     * Time: 14:29
     * @ param $emailSubject 邮件主题
     * @ param $emailContent 邮件内容
     * @ param string $emailAttachment 邮件附件
     * @ return mixed
     */
    public static function send($emailSubject, $emailContent, $emailAttachment = '')
    {
        // TODO: Implement send() method.
    }
}

三、邮件发送类实例

在Mail目录下创建邮件发送类实例并更名为MailSenderFactory.php,具体代码如下:

复制代码
<?php
/**
 * 创建邮件发送类实例工厂
 * User: 龙哥·三年风水
 * Date: 2024/12/5
 * Time: 14:32
 */
namespace Mail;
use app\model\param\Emailsms;
use Error\BaseError;
class MailSenderFactory
{
    protected static $instance=null;//缓存实例
    protected static $channel = [];//通道参数

    /**
     * 调用邮件类实例
     * User: 龙哥·三年风水
     * Date: 2024/12/5
     * Time: 14:49
     * @ param $recipient 邮箱名称
     */
    public static function create($recipient){
        $res = Emailsms::dataFind(['id' => 1],'email_id');
        if(empty($res) || empty($res['email_id']))throw new BaseError("未设置任何邮件发送通道",50000,200);
        $emailIds = explode(',',$res['email_id']);
        $emailType = explode('@',$recipient);
        self::$channel['recipient'] = $recipient;
        switch ($emailType[1]){
            case "qq.com":
                if(!in_array(1,$emailIds))throw new BaseError("未开启QQ邮件发送通道",50000,200);
                self::$channel['mail_id'] = 1;
                break;
            case "163.com":
                if(!in_array(2,$emailIds))throw new BaseError("未开启163邮件发送通道",50000,200);
                self::$channel['mail_id'] = 2;
                break;
            default:
                self::$instance = null;
                self::$channel = [];
                throw new BaseError("未设置任何短信发送通道",50000,200);
                break;
        }
        return self::$instance;
    }
}

四、提前说明

明天开始将完成邮件工厂类封装及测试。

相关推荐
残花月伴2 小时前
springCloud/Alibaba常用中间件之Seata分布式事务
分布式·spring cloud·中间件
睎zyl4 小时前
Spark自定义分区器-基础
大数据·分布式·spark
predisw9 小时前
Kafka如何实现高性能
分布式·kafka
joker D88812 小时前
【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希
c++·分布式·哈希算法
CET中电技术12 小时前
“光伏+储能+智能调控”,CET中电技术分布式智能微网方案如何实现?
分布式·储能·光伏
Akamai中国13 小时前
分布式AI推理的成功之道
人工智能·分布式·云原生·云计算·云服务·云平台·云主机
星星点点洲14 小时前
【RabbitMQ】消息丢失问题排查与解决
分布式·rabbitmq
jingyu飞鸟14 小时前
Centos7系统(最小化安装)安装zabbix7版本详细文章、nginx源代码配置、php源代码、mysql-yum安装
开发语言·php
Q_Q196328847515 小时前
python的家教课程管理系统
开发语言·spring boot·python·django·flask·node.js·php
小白学大数据15 小时前
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
javascript·redis·分布式·scrapy