群控系统服务端开发模式-应用开发-邮件工厂QQ发送开发

一、邮件发送类实例修改

        在Mail目录下修改邮件发送类实例,具体代码如下:

<?php
/*** 创建邮件发送类实例工厂* User: 龙哥·三年风水* Date: 2024/12/5* Time: 14:32*/
namespace Mail;
use app\model\param\Emailsms;
use Error\BaseError;
use Mail\channel\QqMailSender;
use Mail\channel\WangyiMailSender;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;self::$instance = new QqMailSender(self::$channel);break;case "163.com":if(!in_array(2,$emailIds))throw new BaseError("未开启163邮件发送通道",50000,200);self::$channel['mail_id'] = 2;self::$instance = new WangyiMailSender(self::$channel);break;default:self::$instance = null;self::$channel = [];throw new BaseError("未设置任何短信发送通道",50000,200);break;}return self::$instance;}
}

二、QQ邮件工厂开发

        1、添加框架对应的SDK

composer require phpmailer/phpmailer

        2、添加QQ邮件工厂

                在根目录下extend文件夹下Mail文件夹下channel文件夹下,创建QQ邮件发送工厂并命名为QqMailSender。记住,一定要在QQ邮件发送工厂类名后面去实现邮件发送工厂。

<?php
/*** 腾讯QQ邮件发送类* User: 龙哥·三年风水* Date: 2024/12/5* Time: 15:21*/
namespace Mail\channel;
use app\model\param\Mail;
use Mail\MailSenderInterface;
use Error\BaseError;
use PHPMailer\PHPMailer\PHPMailer;class QqMailSender implements MailSenderInterface
{protected static $host = '';// 发送人的SMTP服务器地址protected static $charSet = 'utf8';// 编码格式为utf8,不设置编码的话,中文会出现乱码protected static $recipient = '';// 收件人protected static $username = '';// 发件人protected static $password = '';// 发送方的邮箱密码,注意这里填写的是“客户端授权密码”而不是邮箱的登录密码!protected static $stmpSecure = '';// 使用ssl协议方式protected static $port = 0;// ssl协议方式端口号是465protected static $phpMailer = null;// 邮件发送客户端public function __construct($param){$res = Mail::dataFind(['id' => $param['mail_id']],'username,smtp_address,smtp_port,smtp_password,smtp_protocol,status',true);if(empty($res))throw new BaseError("未开启QQ邮件发送通道",50000,200);if($res['status'] == 0)throw new BaseError("QQ邮件发送通道已被禁用",50000,200);self::$host = $res['smtp_address'];self::$port = $res['smtp_port'];self::$password = $res['smtp_password'];self::$stmpSecure = $res['smtp_protocol'];self::$recipient = $param['recipient'];self::$username = $res['username'];self::$phpMailer = new PHPMailer(true);}/*** 单个邮件发送* User: 龙哥·三年风水* Date: 2024/12/5* Time: 14:29* @ param $emailSubject 邮件主题* @ param $emailContent 邮件内容* @ param string $emailAttachment 邮件附件* @ return mixed*/public static function send($emailSubject, $emailContent, $emailAttachment = ''){self::$phpMailer->isSMTP();// 使用SMTP服务self::$phpMailer->CharSet = self::$charSet;// 编码格式为utf8,不设置编码的话,中文会出现乱码self::$phpMailer->Host = self::$host;// 发送人的SMTP服务器地址self::$phpMailer->SMTPAuth = true;// 是否使用身份验证self::$phpMailer->Username = self::$username;// SMTP账号self::$phpMailer->Password = self::$password;// SMTP密码self::$phpMailer->SMTPSecure = self::$stmpSecure;// 使用ssl协议方式self::$phpMailer->Port = self::$port;// ssl协议方式端口号是465self::$phpMailer->setFrom(self::$username,$emailSubject);// 设置发件人信息,如邮件格式说明中的发件人,这里会显示为self::$phpMailer->addAddress(self::$recipient,$emailSubject);// 设置收件人信息,如邮件格式说明中的收件人if(!empty($emailAttachment))self::$phpMailer->addAttachment($emailAttachment);// 添加附件self::$phpMailer->isHTML(true);self::$phpMailer->Subject = $emailSubject;self::$phpMailer->Body = $emailContent;if(self::$phpMailer->send() == false)throw new BaseError("QQ邮件发送失败:".self::$phpMailer->ErrorInfo,50000,200);return true;}
}

二、测试

<?php
namespace app\controller;
use Encipher\Encrypt;
use Mail\MailSenderFactory;
use Sms\SmsSenderFactory;class Index extends Emptys
{public function index(){$emailSender = MailSenderFactory::create('2420095288@qq.com');$emailSender::send('运维发送','IP更改');return succ('操作成功');}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486282.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang内存模型总结1(mspan、mcache、mcentral、mheap)

1.内存模型 1.1 操作系统存储模型 从上到下分别是寄存器、高速缓存、内存、磁盘&#xff0c;其中越往上速度越快&#xff0c;空间越小&#xff0c;价格越高。 关键词是多级模型和动态切换 1.2 虚拟内存与物理内存 虚拟内存是一种内存管理技术&#xff0c;允许计算机使用比…

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式&#xff1a; (1)预先加载&#xff1a;直接在查询主体时就把对应的依赖实体查出来&#xff08;作为初始查询的一部分&#xff09; (2)显式加载&#xff1a;使用代码指示稍后显式的从…

MATLAB Simulink® - 智能分拣系统

系列文章目录 前言 本示例展示了如何在虚幻引擎 环境中对四种不同形状的标准 PVC 管件实施半结构化智能分拣。本示例使用 Universal Robots UR5e cobot 执行垃圾箱拣选任务&#xff0c;从而成功检测并分类物体。cobot 的末端执行器是一个吸力抓手&#xff0c;它使 cobot 能够拾…

环形链表 (简单易懂)

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

【C++】奇偶数判断题的高级分析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 题目描述题目背景 &#x1f4af;2. 基本解决思路示例分析 &#x1f4af;3. 原始代码分析代码分析代码优点代码缺点 &#x1f4af;4. 教师代码及其优化分析代码分析代码优…

1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

学习大纲&#xff1a; 1. msg 和 srv msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。srv 文件则描述了一个服务&#xff0c;包括两部分&#xff1a;请求和响应。Srv 文件用于生成服务的源代码。msg 文件存储在包的 msg 目录中。srv 文件存…

Linux-笔记---系统文件I/O

1. open函数和close函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);#include <unistd.h> int close(int fd); open函数…

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

计算机毕业设计Spark股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

本文介绍麒麟信安服务器系统(kylinsec)的安装。

本文介绍麒麟信安服务器系统&#xff08;kylinsec&#xff09;的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品&#xff1a; https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址&#xff1a; https://mirrors.kylinsec.com…

并发专题(10)之FutureTask源码剖析

一、FutureTask介绍 Java创建线程的方式&#xff0c;一般常用的是Thread&#xff0c;Runnable&#xff0c;如果需要处理当前的任务有返回结果的话&#xff0c;需要使用Callable。Callable运行需要配合Future来使用。 Future是一个接口&#xff0c;一般会使用FutureTask实现类去…

ssh远程升级Ubuntu20.04到Ubuntu 22.04

ssh远程升级Ubuntu20.04到Ubuntu 22.04 陈拓 2024/10/16-2024/10/26 1. 简介 本文介绍了如何通过ssh将Ubuntu系统从20.04升级到22.04。 在进行系统升级之前&#xff0c;建议备份重要数据&#xff0c;以防升级过程中出现问题。 2. 更新当前系统 硬件系统架构 当前操作系统版…

新手SEO指南:如何从零开始优化网站实现流量增长

内容概要 在这一部分&#xff0c;我们将简要概述新手在进行SEO优化时需要掌握的一些关键内容。SEO&#xff08;搜索引擎优化&#xff09;是一个复杂而多层次的过程&#xff0c;对网站流量的提升至关重要。无论您是刚刚踏入这一领域的新手&#xff0c;还是希望进一步提升网站性…

FPGA实战篇(呼吸灯实验)

1.呼吸灯简介 呼吸灯采用 PWM 的方式&#xff0c;在固定的频率下&#xff0c;通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM&#xff08;Pulse Width Modulation &#xff09;&#xff0c;即脉冲宽度调制&#xff0c;它利用微处理器输出的 PWM 信号&#xff0c;实现对…

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…

项目实例_FashionMNIST_CNN

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

Autosar FO时间分析和设计规范导读

一、规范功能概述 “Timing Analysis and Design AUTOSAR FO R24 - 11” 文档主要聚焦于汽车电子系统开发中的定时分析与设计&#xff0c;详细阐述了相关概念、方法、用例及涉及的各项要素&#xff0c;旨在为汽车电子系统的开发提供全面且系统的定时分析指导&#xff0c;以确保…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

001 LVGL PC端模拟搭建

01 LVGL模拟器介绍 使用PC端软件模拟LVGL运行&#xff0c;而不需要任何嵌入式硬件 环境搭建&#xff1a;codeblocks-20.03mingw-setup 正常安装流程即可 工程获取&#xff1a;LVGL官网-> github仓库 本地安装包下载资源包 工程模版和软件安装包 补充&#xff1a;…