使用gomail.v2库调用邮箱的SMTP服务发送邮件

news/2024/12/29 13:51:37/

  • 功能介绍
  • 实现
  • 配置邮箱发送服务

功能介绍

  • 使用程序实现邮件的发送

之前做登录功能的项目的时候需要用到邮箱验证的功能需要发送邮箱验证码

目前可用的验证码发送可以使用几个方式

  1. 使用第三方邮件服务提供商(如SendGrid、Mailchimp、Amazon SES等)
  2. 使用主机提供商提供的邮件服务(腾讯云的邮件服务)。这将确保您可以从您的应用程序中发送电子邮件。
  3. 可以使用邮箱的SMTP服务进行发送,

实现

开启邮箱的SMTP功能

有些邮箱不支持SMTP功能

我开始想使用gmail的功能,发现现在gmail不支持SMTP功能了,关闭了

然后我就使用了QQ邮箱

  1. 打开设置->账户

  2. 找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

  3. 开启服务

  4. 记录你的邮箱授权码,不要泄露,不然会有安全问题

  5. 端口号一般为端口号465或587

具体操作可参考:

https://wx.mail.qq.com/account/index?sid=zV1EQoxGV2kuGzFiANFjQgAA#/?tab=safety&r=1684856844007

安装gomail.v2

打开终端或命令行窗口,并输入以下命令以安装 gomail:

go get gopkg.in/gomail.v2

这会自动下载并安装最新版本的 gomail 库。以将 v2 替换为其他版本,以安装特定的版本。

如果使用的是 Go Modules,请确保在项目目录中存在一个 go.mod 文件,然后输入以下命令以将 gomail 添加为依赖项:

go get gopkg.in/gomail.v2

这会自动将 gomail 添加到您的项目中,并更新 go.mod 文件。

等待安装完成。一旦安装完成,可以在代码中导入 gomail 并开始使用它了。

import (
    "gopkg.in/gomail.v2"
)

配置邮箱发送服务

封装:创建SMTP客户端+发送邮件服务

import (
 "fmt"

 "github.com/badoux/checkmail"
 "gopkg.in/gomail.v2"
)

// 使用gomail库创建SMTP客户端
func CreatDialer() *gomail.Dialer {
 return gomail.NewDialer("smtp.qq.com"465"xxx@qq.com""xxxx"//AuthCode为邮箱的授权码(填自己的)
}



// 发送邮件函数,+邮箱可用性验证
func SendEmail(dialer *gomail.Dialer, to string, data string) error {
 // 发送邮件的QQ邮箱地址
 qqEmail := "xxxx@qq.com"

 // 检查电子邮件地址是否可用
 err := checkmail.ValidateFormat(to)
 if err != nil {
  return fmt.Errorf("email address %s is not available: %s", to, err.Error())
 }
 // 创建邮件消息
 message := gomail.NewMessage()
 message.SetHeader("From", qqEmail)
 message.SetHeader("To", to)
 message.SetHeader("Subject""xxx")
 message.SetBody("text/plain""data")

 // 发送邮件消息,开携程发生邮件
 go dialer.DialAndSend(message)

 return nil
}

也可以根据自己需要确定传入参数的数量设置邮箱发送的形式与内容

之后我们先创建一个dailer

//连接邮箱
 dailer := funcmod.CreatDialer()

然后直接调用sendemail函数发送邮件就可以实现邮件的发送

//发送验证码
  err = funcmod.SendEmail(dailer, Email, data)

验证邮箱可用性

其实到这里还有缺陷

就是邮箱是否可用不能确定,我们需要增加邮箱可用性的验证才算完整

我在上面的代码中用到了checkmail包就是用来检查邮箱可用性的,需要go get一下这个包.

有兴趣也可以自己写.

// 检查电子邮件地址是否可用
 err := checkmail.ValidateFormat(to)
 if err != nil {
  return fmt.Errorf("email address %s is not available: %s", to, err.Error())
 }

本文由 mdnice 多平台发布


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

相关文章

【JavaEE进阶】——第七节.Spring AOP统一功能处理(切面、切点、连接点、通知)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前…

Java IO 设计模式总结

Java IO设计模式总结 一、装饰器模式 装饰器模式(Decorator)可以在不改变原有对象的情况下拓展其功能。装饰器模式通过组合替代继承来扩展原始类的功能,在一些继承关系比较复杂的场景(IO这一场景各种类的继承关系就比较复杂&…

使用git远程上传github

如果你不是很熟悉git,在使用git前请先对你的项目进行备份 进入本地文件目录,打开git的cmd界面(Git Bash Here)如果当面目录使用过git,有.git隐藏文件,则跳过第二步,没有则输入以下命令 git ini…

再获数千万元追加投资!宏景智驾B轮总融资已近「5亿元」

5月26日,宏景智驾(Hyperview)宣布获得阿美风险投资(Aramco Ventures)旗下多元化成长基金Prosperity7 Ventures数千万元的追加投资,这也是继2022年2月Prosperity7独家投资宏景智驾超亿元战略融资后又一次投出…

小航编程题库机器人等级考试理论一级(2023年03月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:B 第1题关于使用动滑轮说法正确的是?( ) A、是否省力与动滑轮的颜色…

奇巴布Feed流性能优化

01 项目背景 “爱奇艺奇巴布”是爱奇艺为0-8岁孩子和家长定制化设计的寓教于乐平台,为儿童量身打造精致的观看体验,精彩内容解锁寓教于乐新方式。为儿童提供优质动画内容的同时,我们更关注APP用户体验。在产品交互设计上我们立足儿童视角&…

21 VueComponent 事件的处理

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 测试用例如下, 一个简单的 按钮事件的触发 问题的调试 调用…

c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Colle…