ABP VNext 利用QQ邮箱发送邮件

news2024/11/23 16:48:38

ABP VNext 利用QQ邮箱发送邮件

  • 1.配置邮箱
    • 1.1 设置
    • 1.2账户
    • 1.3 开启邮箱服务
    • 1.4 生成授权码
  • 2 默认的SmtpEmailSender发送邮件
    • 2.1 生成数据库
    • 2.2 添加一个后台任务执行发送邮件
    • 2.3 服务中注入ISmtpEmailSender
    • 2.4 在配置文件添加邮箱信息
  • 3 集成MailKit发送邮件
    • 3.1 添加包Volo.Abp.MailKit
    • 3.2 Module文件配置依赖
    • 3.3 服务中注入IEmailSender
    • 3.4 在配置文件添加邮箱信息

1.配置邮箱

1.1 设置

在这里插入图片描述

1.2账户

在这里插入图片描述

1.3 开启邮箱服务

在这里插入图片描述

1.4 生成授权码

在这里插入图片描述

2 默认的SmtpEmailSender发送邮件

2.1 生成数据库

先修改数据库配置文件,执行迁移 ,不然项目启动不起来

2.2 添加一个后台任务执行发送邮件

Module文件的OnApplicationInitialization方法:

public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        ......
        #region 后台服务
        context.AddBackgroundWorkerAsync<MailWorker>();
        #endregion
    }

2.3 服务中注入ISmtpEmailSender

public class MailWorker : AsyncPeriodicBackgroundWorkerBase
    {
        private readonly ISmtpEmailSender _emailSender;
        private readonly ISettingEncryptionService _settingEncryptionService;
        private readonly ISettingDefinitionManager settingDefinitionManager;

        public MailWorker(
            AbpAsyncTimer timer,
            IServiceScopeFactory serviceScopeFactory, ISmtpEmailSender emailSender, ISettingEncryptionService settingEncryptionService, ISettingDefinitionManager settingDefinitionManager
        ) : base(
            timer,
            serviceScopeFactory)
        {
            Timer.Period = 4000; //4s
            _emailSender = emailSender;
            _settingEncryptionService = settingEncryptionService;
            this.settingDefinitionManager = settingDefinitionManager;
        }

        protected async override Task DoWorkAsync(
            PeriodicBackgroundWorkerContext workerContext)
        {
            var setting = settingDefinitionManager.Get(EmailSettingNames.Smtp.Password);
            var ss = _settingEncryptionService.Encrypt(setting, "zuqdlkgeyiyobbcd");
            Logger.LogInformation("Starting: sending...");
            await _emailSender.SendAsync(
                   "***@foxmail.com", "测试发送邮件", "how are you?"
                );
            Logger.LogInformation("Completed: ending...");
        }
    }

2.4 在配置文件添加邮箱信息

{
  "App": {
    "SelfUrl": "https://localhost:44370"
  },
  "ConnectionStrings": {
    "Default": "Server=.;Database=SmtpEmailDemo;Uid=sa;Pwd=qwe123!;TrustServerCertificate=true"
  },
  "Settings": {
    "Abp.Mailing.Smtp.Host": "smtp.qq.com",
    "Abp.Mailing.Smtp.Port": "587",
    "Abp.Mailing.Smtp.UserName": "***@qq.com",
    "Abp.Mailing.Smtp.Password": "zuqdlkgeyiyobbcd",
    "Abp.Mailing.Smtp.Domain": "",
    "Abp.Mailing.Smtp.EnableSsl": "true",
    "Abp.Mailing.Smtp.UseDefaultCredentials": "false",
    "Abp.Mailing.DefaultFromAddress": "***@qq.com",
    "Abp.Mailing.DefaultFromDisplayName": "***@qq.com"
  },
  "StringEncryption": {
    "DefaultPassPhrase": "Yslb62n5falmPABy"
  }
}

注意端口号是587 密码不用自己去加密,直接填写邮箱授权码就行,UseDefaultCredentials为false

3 集成MailKit发送邮件

重复2.1,2.2步骤

3.1 添加包Volo.Abp.MailKit

3.2 Module文件配置依赖

typeof(AbpMailKitModule)

3.3 服务中注入IEmailSender

public class MailWorker : AsyncPeriodicBackgroundWorkerBase
    {
        private readonly IEmailSender _emailSender;
        public MailWorker(
            AbpAsyncTimer timer,
            IServiceScopeFactory serviceScopeFactory, IEmailSender emailSender
        ) : base(
            timer,
            serviceScopeFactory)
        {
            Timer.Period = 4000; //4s
            _emailSender = emailSender;  
        }

        protected async override Task DoWorkAsync(
            PeriodicBackgroundWorkerContext workerContext)
        {
            Logger.LogInformation("Start: starting...");
            await _emailSender.SendAsync(
                   "***@foxmail.com", "测试发送邮件", "how are you?"
                );
            Logger.LogInformation("Completed: ending...");
        }
    }

3.4 在配置文件添加邮箱信息

{
  "App": {
    "SelfUrl": "https://localhost:44373"
  },
  "ConnectionStrings": {
    "Default": "Server=.;Database=MailTest;Uid=sa;Pwd=qwe123!;TrustServerCertificate=true"
  },
  "Settings": {
    "Abp.Mailing.Smtp.Host": "smtp.qq.com",
    "Abp.Mailing.Smtp.Port": "465",
    "Abp.Mailing.Smtp.UserName": "***@qq.com",
    "Abp.Mailing.Smtp.Password": "zuqdlkgeyiyobbcd",
    "Abp.Mailing.Smtp.Domain": "",
    "Abp.Mailing.Smtp.EnableSsl": "true",
    "Abp.Mailing.Smtp.UseDefaultCredentials": "false",
    "Abp.Mailing.DefaultFromAddress": "***@qq.com",
    "Abp.Mailing.DefaultFromDisplayName": "***@qq.com"
  },
  "StringEncryption": {
    "DefaultPassPhrase": "sSMpfXfpBMcXS9Iz"
  }
}

注意端口号是465 密码不用自己去加密,直接填写邮箱授权码就行,UseDefaultCredentials为false

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

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

相关文章

从Docker和Kubernetes看Containerd

导读&#xff1a; 在学习Containerd之前&#xff0c;我们需要去了解Docker与Kubernetes这两个使用Containerd最多的技术&#xff0c;也需要明白什么是容器&#xff0c;什么是容器运行时&#xff0c;以及里面涉及的组件&#xff0c;这些组件是用来干什么的&#xff0c;及容器领域…

Zabbix Httpd漏洞修复2

一、背景 漏洞库升级的真是快啊&#xff0c;绿盟扫描的zabbix服务器又有新的漏洞了&#xff0c;经一番折腾&#xff0c;搞定&#xff0c;记录如下。 二、漏洞内容 漏洞主要还是集中在php和http漏洞 三、修复过程 思路还是升级httpd版本解决。 1、查看下zabbix版本&#xff…

【JVM】垃圾回收机制

垃圾回收三大步骤&#xff1a;判断是不是垃圾(垃圾判断算法) -> 标记需要回收的垃圾(三色标记) -> 回收垃圾(垃圾回收算法)。 一、如何判断是不是垃圾&#xff08;垃圾判断算法&#xff09;&#xff1f; &#xff08;1&#xff09;引用计数器算法&#xff1a;对象中记录…

基于STM32F103C8T6的超声波测距——串口输出

文章目录 前言一、超声波模块介绍1、产品特点2、超声波模块的时序图 二、STM32CubeMx创建工程1、配置项目2、keil代码设置3、效果 三、总结四、参考资料 前言 环境&#xff1a; 1、硬件&#xff1a;stm32f103c8t6 核心板 2、软件&#xff1a;STM32CubeMX 6.4.0 3、软件&#xf…

进程通信管道制作

利用父子进程 创建管道利用pipe函数 // 1.创建管道int pipefd[2] {0}; //[0] 读端 &#xff0c;[1]写端int n pipe(pipefd);assert(n ! -1); // debug 在release下会裁减(void)n;//防止在release下报错cout << "fd[0]:" << pipefd[0] << endl…

多用户商城开源-多店铺商城系统平台开发

多用户商城开源是指一种基于开放源代码的电子商务平台&#xff0c;允许多个用户共享一个平台&#xff0c;每位用户可以创建自己的电子商城&#xff0c;并在平台上进行交易、管理、营销等操作。多用户商城开源通常包含多种功能&#xff0c;如商品管理、订单管理、支付集成、促销…

vue diff算法与虚拟dom知识整理(14) patchVNode处理子节点新增和删减

上文 vue diff算法与虚拟dom知识整理(13) 手写patch子节点更新换位策略 我们实现了子节点位置的更新策略 但还有一些匹配不到的情况会导致死循环 那么我们继续来优化一下 我们先将src下的 index.js 代码改成这样 import h from "./snabbdom/h"; import patch from …

Scrapy ImagesPipeline下载图片

一、 ImagesPipeline是啥 ImagesPipeline是scrapy自带的类&#xff0c;用来处理图片(爬取时将图片下载到本地)。 二、ImagesPipeline优势&#xff1a; 将下载图片转换成通用的jpg和rgb格式避免重复下载缩略图生成图片大小过滤异步下载 三、ImagesPipeline工作流程 爬取一个…

Echarts构建指定省份的地图

1. 自行准备好Echarts环境 Echarts官网&#xff1a;https://echarts.apache.org/zh/index.html 2. 下载需要的省份或者城市的json地理信息文件 下载我们需要显示地区的Json数据&#xff0c;这个Json数据用于Echart的地图显示 例如我这里是下载的&#xff1a;湖南、湖北、四川…

同步模式之顺序控制线程执行

tip: 作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 文章目录 一、同步模式之顺序控制线程执行二、代码样例三、三个线程分别输出a、b、c&#xff0c;按顺序输…

作为一个项目管理成员,怎样才能有效监控项目执行?

作为一个项目管理成员&#xff0c;有效监控项目执行是确保项目成功的关键。在项目执行期间&#xff0c;您需要密切关注项目进展&#xff0c;并及时采取行动来纠正任何偏差。以下是几个有效的方法&#xff0c;可以帮助您监控项目执行并确保项目按计划顺利进行。 1. 制定详细的项…

C语言进阶--数据的存储

目录 数据类型介绍 基本内置类型&#xff1a; 类型的意义&#xff1a; 类型的基本归纳&#xff1a; 整型在内存中的存储 原码&#xff0c;反码和补码&#xff1a; 大小端存储模式&#xff1a; 大小端产生原因&#xff1a; 浮点型在内存中的存储 数据类型介绍 基本内…

六、机械手的种类

机械手是机器人能够完成指令的一个重要输出装置&#xff0c;机器臂是否合理、有效&#xff0c;决定了机 器人能否发挥出应有的作用。 机械手是一种能模仿人手和臂的某些动作功能&#xff0c;用以按固定程序抓取、搬运物件或操作工具的自动操作装置。特点是可以通过编程来完成各…

wy的leetcode刷题记录_Day68

wy的leetcode刷题记录_Day68 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2023-6-6 前言 目录 wy的leetcode刷题记录_Day68声明前言1019. 链表中的下一个更大节点题目介绍思路代码收获 1019. 链表中的下一个更大节点 2352. 相等行列…

CPU、内存、缓存的关系

术语解释 &#xff08;1&#xff09;CPU&#xff08;Central Processing Unit&#xff09; 中央处理器 &#xff08;2&#xff09;内存 内存用于暂时存放CPU中的运算数据&#xff0c;以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁&#xff0c;内存的运行决定…

Docker容器管理

docker容器相当于一个进程&#xff0c;性能接近于原生&#xff0c;几乎没有损耗&#xff1b; docker容器在单台主机上支持的数量成百上千&#xff1b; 容器与容器之间相互隔离&#xff1b; 镜像是创建容器的基础&#xff0c;可以理解镜像为一个压缩包 docker容器的管理 容…

深耕电力行业,百度智能云助力电厂节煤降耗

山西省吕梁市汾阳市三泉镇&#xff0c;晋能集团旗下山西国峰煤电有限责任公司的两台300MW循环流化床直接空冷机组正在运行&#xff0c;燃煤通过传送带进入锅炉燃烧&#xff0c;将水加热成高温高压蒸汽&#xff0c;用以推动汽轮机拖动发电机旋转发电&#xff0c;支撑工业生产、点…

CW32-Template CW32F030开发板工程模板

国产MCU Embedded-CW32-Board-Template Embedded-CW32-Board-Template CW32-Template第三方资源集合 CW-Template CW32开发者开发板资料 CW32-Board 开发板资料 合集 官方提供的案例Examples CW32F030_StandardPeripheralLib\Examples CW32-48F大学计划板例程 EX1流…

优思学院|精益和六西格玛都强调的一件东西...

精益和六西格玛有着诸多不同&#xff0c;它们的方法和理念也不尽相同&#xff0c;但却有一件东西&#xff0c;是他们的共同理念和工具&#xff0c;那就是----标准。 标准&#xff0c;是企业管理中至关重要的一环。标准&#xff0c;不仅指导着我们对人、物和流程的处理方式&…

2023年鄂州中级职称水测考试什么时候考试?

今天鄂州中级职称水测考试开始打印准考证了&#xff0c;但是只能打印部分专业的水测准考证&#xff0c;按照专业&#xff0c;按照批次打印的。 具体通知如下: 各位考生&#xff1a; 为积极稳妥做好我市晋升中、初级专业技术职称综合系列水平能力测试工作&#xff0c;现按专业分…