PHP 使用ThinkPHP实现电子邮件发送示例

文章目录

  • 首先我们需要设置我们的邮箱客户端授权,获取到授权码
    • 找到我们的邮箱设置
    • 去账号中找到这一堆服务,找到后开启smtp服务
    • 开启服务后管理服务
  • 接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)
  • 在thinkPHP中封装一下邮件服务类
    • 实际调用
    • 效果
  • 总结

在我们很多的程序中都需要发送邮件去提示用户一些相关信息,应用的范围还是很广的,比如:登录验证需要验证码,后台管理系统中有变更需要发送邮箱提示等,而且邮件的发送相较于短信发送成本更低,是 免费的!!
那么要实现邮件发送需要做以下操作:

首先我们需要设置我们的邮箱客户端授权,获取到授权码

找到我们的邮箱设置

我这边使用的是QQ邮箱,每个邮箱基本都差不多
QQ邮箱首页

去账号中找到这一堆服务,找到后开启smtp服务

QQ邮箱设置账号页服务区

开启服务后管理服务

在这里点击就可以获取到授权码啦
QQ邮箱获取stmp授权码获取

接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)

直接使用composer安装扩展phpmailer

composer require phpmailer/phpmailer

在thinkPHP中封装一下邮件服务类

我把它封装在了application目录下的common.php公共类中,下面是代码:

// 应用公共文件
namespace app;class Common
{// 应用公共文件/*** 邮件发送* @param email 邮箱号,发送给谁* @param code 邮件内容*/public function send_code_to_email($email, $code){Vendor('PHPMailer.PHPMailerAutoload');//这里引入一下刚才安装扩展的自动加载类$mail = new \PHPMailer(); // 实例化类,新建$mail->isSMTP(); //  开启SMTP$mail->CharSet = 'utf8'; // 设置编码$mail->Host = 'smtp.qq.com'; // SMTP服务器$mail->SMTPAuth = true; // smtp需要鉴权 这个必须是true$mail->Username = ''; // 发信人的账号,这个需要是开启stmp服务的邮箱号$mail->Password = ""; // 密码,非邮箱密码,是SMTP生成的密码,也就是授权码$mail->From = ''; // 发信人的地址$mail->SMTPSecure = 'ssl'; // 采用ssl协议,这里采用了加密,端口需要进行开放:465或587$mail->Port = 465; // 端口号$mail->FromName = ""; // 发件人昵称$mail->addAddress($email); // 收信人地址$mail->addReplyTo($email); //回复的时候回复的邮箱,建议和发信人一样$mail->Subject = ""; // 邮件主题,看自己需求$mail->Body = $code; // 邮件内容if (!$mail->send()) {return json([400, $mail->ErrorInfo]);} else {return json([200, '验证码已经发送成功']);}}
}

我这边是只封装了收件人和邮件内容,看具体业务需求,可以将主题,发件人昵称也封装一下

实际调用

在需要调用的地方进行调用就可以了,当然要先将公共类引入
在需要调用的控制器文件中的命名空间下使用use引入

use app\Common;

调用函数

/*** 电子邮件* @param string $email邮箱号* @param string $code邮件内容* 具体到common应用公共函数文件内找senf_code_to_email方法*/
public function sends()
{$email = input('email');//获取到收件人$code = input('code');//获取到邮件内容$send = new Common();//实例化公共类return $send->send_code_to_email($email, $code);//调用封装好的方法
}

效果

我这边直接用网页url调用了一下
调用返回
收到邮件:
收到邮件

总结

总体其实还是比较简单的,需要注意如果不使用ssl安全协议的话端口是25,不过阿里云是强制ssl安全的,所以最好还是使用465端口比较好
到邮箱中授权开启获取授权码->在thinkPHP框架中使用composer安装PHPMailer扩展->封装一下发送邮件方法->在业务中调用即可

希望对大家有所帮助,如果觉得有用的话还请不吝三连
请添加图片描述

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

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

相关文章

Ajax_4(进阶)同步异步+ 宏任务微任务 + Promise链 + async终极解决方案 +事件循环原理 + 综合案例

Ajax(进阶) 文章目录 Ajax(进阶)01-同步代码和异步代码什么是同步代码?什么是异步代码?代码阅读 02-回调函数地域概念缺点代码示例 03-Promise链式调用概念细节好处代码示例 04-Promise链式应用代码示例 05-async函数和await概念代码示例 06-async和awai…

Mysql 建索引规范

索引规范 今天在建线上表的时候,做了一个varchar的索引,运维说varchar的索引会占用很大的内存。 于是 上网搜了一下建索引规范 一、建表规约 【强制】(1) 存储引擎必须使用InnoDB 解读:InnoDB支持事物、行级锁、并发…

数据结构—图的应用

6.4图的应用 概念回顾—生成树 生成树:所有顶点均由边连接在一起,但不存在回路的图。 一个图可以有许多棵不同的生成树、含有n个顶点 n-1 条边的图不一定是生成树所有生成树具有以下共同特点 生成树的顶点个数与图的顶点个数相同;生成树是图的…

如何运用小程序技术闭环运营链路?

如何通过线上小程序获取用户线索,提高企业抗风险能力,建立有效的营销数字化系统一直是困扰每一个小程序开发者与运营者的问题。 当我们选择使用小程序设计自己的运营流程时,从「推广」到「转化」,再到最终的「留存」都是运营过程…

ABeam×Startup丨德硕管理咨询(深圳)创新研究团队前往灵境至维·既明科技进行拜访交流

近日,德硕管理咨询(深圳)(以下简称“ABeam-SZ”)创新研究团队一行前往灵境至维既明科技有限公司(以下简称“灵境至维”)进行拜访交流,探讨线上虚拟空间的商业模式。 现场合影 &…

前台测试转后台优化历险记,应届生薪资8K逆袭,从此扶摇直上九万里!

优橙教育每一期都会有不少从前台测试转到后台的小伙伴应邀而来,其实每个人的经历都是大致相同的,这时候肯定会有很多小伙伴问,为什么出来花钱出来参加培训而不是在项目上转呢? 或许是因为在项目上摸爬滚打太久了,吃不下…

Qt扫盲-QWidget理论使用总结

QWidget理论使用总结 一、概述二、顶层 控件 和子 控件三、复合控件四、自定义控件和绘制五、大小提示和大小策略六、事件七、一组函数和属性八、QWidget样式表九、透明度和双缓冲十、创建半透明窗口 一、概述 widget 是用户界面的最小单位:它从window系统接收鼠标…

Jsoup爬取简单信息

1. 豆瓣图书最受关注 1.1 创建SpringBoot项目或者Maven项目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言 QStackedWidget继承于QFrame&#xff0c;QFrame继承于QWidget&#xff0c;是Qt常用的堆栈窗口部件。 框架类QFrame介绍 QStackedWidget堆栈窗口&#xff0c;根据下标切换&#xff0c;一次显示一个小部件&#xff0c;常用于应用界面切换、图片轮询播放等场景。 二、QSt…

用Java调用C#的WebService接口

这是一个用Java调用C#版程序的例子,废话不多说,上代码: C#接口代码: using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Services.Description;[WebService(Namespace = " http://www.ta…

如何在Springboot项目中读取zip压缩包并且把文件导出成zip压缩包

文章目录 设想场景实现流程小结 设想场景 为方便老师录入大量学生图片信息&#xff0c;在添加照片时&#xff0c;学生的相关资料以身份证号码图片描述命名如 &#xff08;1231231234567一寸照片.jpg&#xff09; &#xff08;1231231234567身份证正面照片.jpg&#xff09; &am…

中小企业体育代言:探索费用策略与实际操作

随着体育市场的不断扩大和企业品牌的不断提升&#xff0c;中小型企业正逐渐将目光投向了体育明星代言&#xff0c;希望通过这一策略来提升品牌知名度、美誉度&#xff0c;进而吸引目标消费者的注意力并提升销售量。然而&#xff0c;中小型企业请体育明星代言的费用究竟是多少呢…

docker 离线模式-部署容器

有网络的情况下下载需要的镜像 比如(下面以tomcat为例子&#xff0c;其他镜像类似) docker pull tomcat打包镜像文件到本地 docker save tomcat -o tomcat.tar将tomcat.tar 上传到内网服务器&#xff08;无外网环境&#xff09; 导入镜像 docker load -i tomcat.tar创建容器…

element-ui的el-dialog,简单的封装。

el-dialog是使用率很高的组件 使用el-dialog很多都是按照文档的例子&#xff0c;用一个变量控制是否显示&#xff0c;再来一个变量控制标题。 如果我这个对话框多个地方使用的话还要创建多个变量&#xff0c;甚至关闭之后还要清空一些变量&#xff0c;应该可以简化一点。我写…

Windows Hyper-V Ubuntu 22.04 LTS安装

文章目录 Ubuntu准备Hyper-V启用虚拟化支持services.msc 打开服务列表&#xff0c;关注Hyper-V服务是否启动打开管理器创建虚拟机 启动备份 Ubuntu 下载Ubuntu-Desktop&#xff0c;这是个iso文件。 准备 20GB以上的磁盘空间&#xff0c;ubuntu安装后的虚拟磁盘文件超过15GB一…

C/C++test两步完成CMake项目静态分析

您可能一直在静态分析中使用CMake。但您是否尝试过将Parasoft C/Ctest与CMake一起使用吗&#xff1f;以下是如何使用C/Ctest在基于CMake的项目中运行静态分析的详细说明。 CMake是用于构建、测试和打包软件的最流行的工具之一。Parasoft C/Ctest通过简化构建管理过程&#xff…

【Minecraft】Fabric Mod开发完整流程1 - 环境配置与第一个物品

前言 Fabric 是 Minecraft 一款非官方的模组 API,与 Forge mod 不同。它以轻量级和高性能为设计目标,专注于支持新版本的 Minecraft。 Fabric 和 Forge 在各自的加载编译流程上差别很大&#xff0c;所以你很难看见有同时支持二者的 mod&#xff0c;除非做了兼容性处理 Fabri…

【Java笔记】对象存储服务MinIO

1 MinIO简介 MinIO基于Apache License v2.0开源协议的对象存储服务&#xff0c;可以做为云存储的解决方案用来保存海量的图片&#xff0c;视频&#xff0c;文档。由于采用Golang实现&#xff0c;服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单&#xff0c;基本是复…

mac-右键-用VSCode打开

1.点击访达&#xff0c;搜索自动操作 2.选择快速操作 3.执行shell脚本 替换代码如下&#xff1a; for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存会出现一个弹框&#xff0c;保存为“用VSCode打开” 5.使用

基于百度语音识别API智能语音识别和字幕推荐系统——深度学习算法应用(含全部工程源码)+测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 翻译3. 格式转换4. 音频切割5. 语音识别6. 文本切割7. main函数 系统测试工程源代码下载其它资料下载 前言 本项目基于百度语音识别API&#xff0c;结合了语音识别、视频转换音频识别以及语句停顿…