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

news/2025/1/21 10:51:28/

        首先在系统根目录下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;}
}

四、提前说明

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


http://www.ppmy.cn/news/1552885.html

相关文章

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…

Groom Blender to UE5

Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好&#xff0c; While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …

如果模块把http改成了https请求,测试方案应该怎么制定

首先确定要测试的模块、接口、功能等&#xff0c;以及测试的目标&#xff0c;确保HTTPS请求能够正常进行、数据传输安全等。 1.功能测试 回归相应的功能模块以及业务逻辑&#xff0c;是否正常 2.兼容测试 测试不同浏览器和操作系统是否能够正常支持HTTPS连接。 验证模块在各种设…

HiveSQL 中判断字段是否包含某个值的多种方法详解

目录 一、数据准备 二、判断字段是否包含某值的方法 like 方法 locate 函数方法 instr 函数方法 regexp_extract 函数方法 strpos 方法&#xff08;Hive 不支持&#xff0c;其他技术支持&#xff09; 三、总结 在使用 HiveSQL 进行数据处理与分析时&#xff0c;常常会遇…

Sringboot项目实现文件上传至linux指定目录

本篇文章讲述一个springboot项目如何实现一个文件上传接口&#xff0c;涉及vsftpd服务、SSH协议以及对linux系统的一些配置。 一、springboot工程部分 本篇文章略过springboot创建过程&#xff0c;具体见之前发过的文章 1.1在pom.xml中添加SFTP&#xff08;SSH 文件传输协议…

Docker 安装和使用

#Docker 安装和使用 文章目录 1. 安装2. 干掉讨厌的 sudo3. 使用镜像源3.1. 使用 upstart 的系统3.2. 使用 systemd 的系统 4. 基本使用4.1. 容器操作4.2. 镜像操作 5. 网络模式说明5.1. bridge 模式5.2. host 模式5.3. container 模式5.4. none 模式 6. 查看 Docker run 启动参…

【二分查找】力扣 875. 爱吃香蕉的珂珂

一、题目 二、思路 速度 k&#xff08;单位&#xff1a;根/小时&#xff09;是存在一个取值范围的。 速度越大肯定在规定的时间之内一定会吃完全部的香蕉&#xff0c;但也是可以确定出一个上界的。由于只要保证一小时之内&#xff0c;可以吃完香蕉数目最多的那一堆的香蕉&…

深入浅出:PHP 控制结构与循环语句

文章目录 引言控制结构条件判断if-else 语句elseif 语句嵌套的 if 语句三元运算符 switch 语句 循环语句for 循环遍历数组使用 range() while 循环基本用法无限循环循环控制语句break 语句continue 语句do-while 循环 综合案例参考资料 引言 PHP 是一种广泛用于服务器端开发的…