网站做的题不小心关闭了/重庆网站排名优化教程
一、安装
go get github.com/go-redis/redis/v8
go get gopkg.in/gomail.v2
二、使用"gopkg.in/gomail.v2"群发
package mainimport (gomail "gopkg.in/gomail.v2"
)func main() {// 邮件内容m := gomail.NewMessage()m.SetHeader("From", "demo@163.com")m.SetHeader("To", "demo@qq.com")m.SetHeader("Subject", "邮件标题")m.SetBody("text/html", "<h2>邮件内容</h2>")// 邮件服务器账号密码// func NewDialer(host string, port int, username, password string) *Dialerd := gomail.NewDialer("smtp.163.com",25,"demo@163.com","password",)// 发送邮件d.DialAndSend(m)
}
三、邮箱服务配置,以QQ邮箱为例
四、示例代码
package mainimport ("context""fmt"redis "github.com/go-redis/redis/v8""gopkg.in/gomail.v2""gopkg.in/ini.v1""log""time"
)func main() {// 1、连接redis,确保redis服务已开启// 创建一个Redis客户端实例rdb := redis.NewClient(&redis.Options{Addr: "localhost:6379", // Redis 服务器地址Password: "", // 没有密码就留空DB: 0, // 使用默认DB})// 关闭 Redis 连接defer rdb.Close()ctx := context.Background()// 检查连接pong, err := rdb.Ping(context.Background()).Result()if err != nil {fmt.Println("连接Redis失败", err)return}fmt.Println(pong) // 输出 PING 命令的响应// 模拟添加邮件到待发送队列email1 := "123xxx@qq.com"email2 := "123xxx@qq.com"email3 := "123xxx@qq.com"// 使用LPush命令向名为'my_list'的列表中添加元素//values := []interface{}{"2576265911@qq.com", "2576265911@qq.com", "2576265911@qq.com"}//err := rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()err = rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()if err != nil {log.Fatalf("无法推送到列表: %v", err)}// 初始化邮件发送配置cfg, err := ini.Load("conf/email_config.ini")if err != nil {log.Fatalf("加载邮件配置失败: %v", err)}sender := cfg.Section("AUTHENTICATION").Key("username").String()password := cfg.Section("AUTHENTICATION").Key("password").String()smtpServer := cfg.Section("SMTP_SERVER").Key("smtp_server").String()smtpPort := cfg.Section("SMTP_SERVER").Key("smtp_port").MustInt(587)// 连接到 SMTP 服务器d := gomail.NewDialer(smtpServer, smtpPort, sender, password)// 循环处理邮件队列for {// 从 Redis 队列中获取邮件email, err := rdb.RPop(ctx, "email_queue").Result()if err == redis.Nil {// 队列为空,退出循环fmt.Println("电子邮件队列为空。")break} else if err != nil {log.Fatalf("无法从队列中获取电子邮件: %v", err)}// 创建邮件消息m := gomail.NewMessage()m.SetHeader("From", cfg.Section("EMAIL").Key("from").String())m.SetHeader("To", email)m.SetHeader("Subject", cfg.Section("EMAIL").Key("subject").String())// 设置邮件内容m.SetBody("text/plain", cfg.Section("EMAIL").Key("body").String())// 发送邮件if err := d.DialAndSend(m); err != nil {log.Fatalf("无法将电子邮件发送到:%s: %v", email, err)}// 模拟邮件发送后的一些操作fmt.Printf("发送电子邮件至:%s\n", email)time.Sleep(5 * time.Second) // 可以添加一些延迟以限制发送速率}
}
五、邮件配置
# 以QQ邮箱为例
[SMTP_SERVER]
smtp_server = smtp.qq.com
#587或465,具体取决于SMTP服务器配置
smtp_port = 587[AUTHENTICATION]
# 发送者邮箱
username = qwexxxx@qq.com
# 授权码,不是登录密码
password = aafrsdgsgsssfqw[EMAIL]
# 发送者邮箱
from = qwexxxx@qq.com
subject = Test Email(邮件主题)
body = 这是我的应用程序发送的测试电子邮件。[SECURITY]
use_tls = yes
tls_insecure_skip_verify = no;这个配置文件包含以下部分:
;SMTP_SERVER: 存储 SMTP 服务器的主机名和端口号。
;AUTHENTICATION: 存储用于邮件认证的用户名和密码。
;EMAIL: 存储发送邮件时使用的发件人地址、邮件主题和邮件正文。
;SECURITY: 存储安全设置,比如是否使用 TLS 加密以及是否跳过 TLS 证书验证。
;请注意,你需要将示例中的占位符(如 smtp.example.com、your_email@example.com 和 your_password)替换为实际的值。此外,use_tls 和 tls_insecure_skip_verify 用于配置安全选项,具体值取决于你的邮件服务器配置。
;在实际使用中,出于安全考虑,不建议在配置文件中明文存储密码。可以使用环境变量或加密存储密码的方式来提高安全性。
相关文章:

Go 群发邮件Redis 实现邮件群发
一、安装 go get github.com/go-redis/redis/v8 go get gopkg.in/gomail.v2 二、使用"gopkg.in/gomail.v2"群发 package mainimport (gomail "gopkg.in/gomail.v2" )func main() {// 邮件内容m : gomail.NewMessage()m.SetHeader("From", &qu…...

夕小瑶:资本寒冬下的AI创业一年
几天前我和几位前大厂朋友约了个饭,朋友纷纷向我透露出一种纠结: “GPT-4o将催生一大波创业机会啊,想离职” “但是现在是资本寒冬啊” “好想像你一样勇敢啊” 说起来这两年的大厂打工人确实比较难,受经济大环境影响࿰…...

[JAVASE] 异常 与 SE阶段知识点补充
目录 一. 异常 1.1 什么是异常? 1.2 异常的本质 1.3 异常的分类 1.4 如何处理异常? 1.5 自定义异常 1.6 受查异常 与 非受查异常 与 Error(重要) 二. Object类 三. 内部类 2.1 什么是内部类? 2.2 内部类的分类 2.3 常用内部类的使用 四. 总结 一. 异常 1.1 什么是异…...

可视化数据科学平台在信贷领域应用系列一:数据探索
引言 信贷风险数据建模是金融机构在数据量日益庞杂的时代进行信贷业务风控的关键技术。它能够帮助机构更好地控制风险、减少违约损失,并提高业务效率。通过不断优化建模方法和利用建模工具,金融机构的风险控制能力得到了显著提升。 在本文中,…...

SpringBoot发送Gmail邮件
1. 登录Gmail Gmail网址 点击右上角“小齿轮”,然后点击"查看所有设置" 点击“转发和 POP/IMAP”,按图中设置,然后点击保存: 2. 启用两步验证(https://myaccount.google.com/security) 登录上述网址,找…...

【小海实习日记】金融-现货以及合约理解
在股票和金融市场中,“单项持仓”和“双向持仓”是两个常见的概念,主要用于描述投资者在市场中的头寸及其策略。 单项持仓(单向持仓) 单项持仓是指投资者在市场中只持有一种方向的头寸(多头或空头)&#…...

html 添加元素如何能提升速度
在 HTML 中,如果你需要频繁地添加大量元素,需要确保你的操作能够以最佳性能进行。以下是一些有助于提高添加元素速度的方法: 综上所述,通过使用文档片段、innerHTML、虚拟滚动以及避免频繁的重排和重绘,你可以提高在 H…...

人工智能大模型的进化之路:探索如何让它们变得更“聪明”
一、引言 在人工智能(AI)领域,大模型凭借其强大的处理能力和广泛的应用前景,已经成为研究的热点。然而,尽管这些模型在多个领域展现出了惊人的能力,但它们仍然面临着理解力、泛化能力和适应性等方面的挑战…...

【设计模式深度剖析】【6】【结构型】【外观模式】| 以电脑开关按钮为例,并结合微服务架构的API网关加深理解
👈️上一篇:桥接模式 | 下一篇:享元模式👉️ 设计模式-专栏👈️ 目 录 外观模式(Facade Pattern)定义英文原文直译如何理解呢?字面理解代码实现中的理解生活案例:操作多功能料理机典型案例…...

2024拼多多 最新理论+实战干货,从入门到精通全链路多角度学习-7节课
基于最新规则理论结合实际的干货 课程内容: 01 2024年多多防比价新规则破局理论课与实操课.mp4 02 24年多多强付费第二节课基础内功.mp4 03 24年多多强付费第三节课直通车实操 .mp4 04 24年多多强付费第一节课市场定价格段,mp4 05 24年多多自然流第一节课市场…...

在Three.js中实现模型点击高亮:整合EffectComposer与OutlinePass的终极指南
效果【后期实现鼠标点击选中轮廓后给出一个弹窗显示相应的模型信息】 标签指示线参考我的上一篇文章 引言 Three.js不仅让WebGL的3D图形编程变得简单易懂,还通过其强大的扩展库支持丰富的后期处理效果,为3D场景增添无限魅力。本篇文章将引导您深入了…...

Webrtc支持HEVC之FFMPEG支持HEVC编解码(一)
一、前言 Webrtc使用的FFMPEG(webrtc\src\third_party\ffmpeg)和官方的不太一样,使用GN编译,各个平台使用了不一样的配置文件 以Windows为例,Chrome浏览器也类似 二、修改配置文件 windows:chromium\config\Chrome\win\x64 其他平台: chromium\config\Chrome\YOUR_SYS…...

高校实验室危险化学品及重大危险源安全管理系统
高校实验室危险化学品及重大危险源安全管理的重要性: 保障师生安全:通过严格管理,可以有效地降低这些风险,确保师生在实验室内的安全。 确保实验教学质量:良好的危化品管理能够确保实验材料的准确性和可靠性࿰…...

【Godot4自学手册】第四十一节背包系统(一)UI设置
各位同学,好久没有更新笔记了,今天开始,我准备自学背包系统。今天先学习下UI界面设置。 一、新建场景和结点 1.新建Node2D场景,命名为Inventory,保存到Scenes目录下,inventory.tscn。 2.新建TextureRect子…...

JS继承的方式
目录 原型链继承构造函数继承组合继承寄生组合继承ES6 Class 继承原型链继承 原理: 通过将子类的原型(prototype)设置为父类的一个实例,使得子类实例能够沿着原型链访问到父类的属性和方法。 function Parent() {this.parentProperty...

拓展虚拟世界边界,云手机可以做到吗
虚拟世界,AI,VR等词汇是21世纪最为流行的词汇,在科技背后,这些词汇的影响变得越来越大,已经走进了人们的世界,比如之前APPLE发布的vision pro,使人们能够更加身临其境的体验到原生os系统&#x…...

网络的功能和实现方法简介
网络的功能: 计算机网络是研究怎么样在两个端用户之间提供访问通路的。所以网络的功能是为网络上的任意两个端用户之间提供访问通路。 计算机通信的特点: 间歇性和突发性。即时而线路中没有信息流过,时而突来的大量数据需要迅速传输。为此计…...

npm有哪些插件包??
1.Web开发相关 Web开发相关的npm插件包涵盖了各种工具、框架和库,帮助开发人员简化开发流程、提高效率并实现更好的用户体验。以下是一些常见的Web开发相关的npm插件包及其功能: 1. webpack:一个现代的JavaScript应用程序的静态模块打包工具…...

SpringBoot基础篇
1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…...

【java11】java11新特性介绍
Java11于2018年9月25日正式发布,Java11是继Java8之后的第一个LTS(Long-Term-Support)长期支持功能版本,与之前的版本(Java9和Java10)不同,它提供了长达3年的维护期,旨在提供稳定且长…...

搜维尔科技:介绍下Manus的OptiTrack 手套,体验精致的每指触觉!
搜维尔科技:介绍下Manus的OptiTrack 手套,体验精致的每指触觉! 搜维尔科技:介绍下Manus的OptiTrack 手套,体验精致的每指触觉!...

Element ui 快速入门(基础知识点)
element ui官网 前言: 在当今时代,我们在编写计算机程序时,不仅仅是写几个增删改查的简单功能,为了满足广大用户对页面美观的需求,为了让程序员们写一些功能更简便,提高团队协作效率,所以eleme…...

[数据集][目标检测]脑肿瘤检测数据集VOC+YOLO格式9787张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):9787 标注数量(xml文件个数):9787 标注数量(txt文件个数):9787 标注…...

兆易创新:周期已至 触底反弹?
韩国那边来的数据啊,4月芯片库存同比下降33.7%,创近10年以来(最)大降幅,芯片出口同比增长53.9%,其中存储芯片出口额同比大幅增长98.7%,开启了涨价模式。沉寂一年多的存储芯片迎来了景气周期。 所…...

【分享】两种方法禁止修改Word文档
对于比较重要的Word文件,不想被随意编辑修改,可以试试以下两个方法,不清楚的小伙伴,一起来看看吧! 方法1:设置“只读方式” 我们可以给Word文档设置以“只读方式”打开,这样就算编辑修改了文档…...

藏品名称:龙凤呈祥摆件
藏品名称:龙凤呈祥摆件 规格:重约 14.3Kg 藏品类别:杂项 此器身布满繁缠纹饰。器表为一轮红日出于东方,照耀辽阔江海。红日旁边有两点黄金凸显其尊贵。一神龙首尾相接有祥云伴随,大山脚下栖息着一只凤凰与神龙遥相呼应。龙身和龙尾交接处有花和花蕊,花开富贵象征着吉祥。整个…...

Ubuntu server 24 (Linux) sudo 免输密码
1 sudo 使用要输入密码,费时费力。 2 sudo命令免输密码,需要修改/etc/sudoers文件 #本文以test用户为例,#允许不需要输入密码执行 sudo vi /etc/sudoers test ALL(ALL) NOPASSWD: ALL %sudo ALL(ALL:ALL) ALL --> #%sudo ALL(ALL:ALL) ALL#所有…...

Qt——控件
目录 概念 QWidget核心属性 enabled geometry WindowFrame的影响 windowTitle windowIcon qrc的使用 windowOpacity cursor font toolTip focusPolicy 编辑 styleSheet 按钮类控件 PushButton RadioButton CheckBox 显示类控件 Label textFormat pixm…...

6个迹象表明你的电脑电缆管理很糟糕,看下你有没有中招
清理电脑内部的电缆可能看起来像是徒劳的忙碌。毕竟,如果一切都正常,为什么还要麻烦呢?好吧,我有六个很好的理由可以说服你打开你的机箱,修复你电脑里的混乱。 你很难打开侧板 如果你的电缆离侧板的边缘太近,你将无法毫不费力地将它们滑开。虽然这不是你每天都要做的…...

代码随想录算法训练营第二十八天|LeetCode93 复原IP地址、LeetCode78 子集
题1: 指路:LeetCode93 复原IP地址 思路与代码: 对于这种暴搜出不来的就该用回溯了。对于一个合理的IP地址:有四个字串,每个字串的值的和在[0, 255]中即可(注意不可有前导0)。所以我们用一个计数器pointSum为给定字符…...