(10)go-micro微服务发送邮件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: (10)go-micro微服务发送邮件

一 获取QQ邮箱Pass

  • 1.登录QQ邮箱
  • 2.点击设置,点击账户,下拉找到POP3/SMTP,点击生成授权码


62.png


  • 3.这样就获取了授权码,要妥善保管。

二 安装gomail

go get gopkg.in/gomail.v2


三 初始化发送邮件

  • 在mail目录下的mail.go文件中,输入以下代码:
package mail
import (
   "account/common/micro"
   "account/config/logger"
   "account/config/redis"
   "fmt"
   "gopkg.in/gomail.v2"
   "math/rand"
   "time"
)
func InitSendMail(mailTo string, subject string, body string, code string) (string, error) {
   // 设置邮箱主体
   mailConn := map[string]string{
      "user":   micro.ConsulInfo.Email.User,   //发送人邮箱(邮箱以自己的为准)
      "pass":   micro.ConsulInfo.Email.Pass,   //发送人邮箱的密码,现在可能会需要邮箱 开启授权密码后在pass填写授权码
      "host":   micro.ConsulInfo.Email.Host,   //邮箱服务器(此时用的是qq邮箱)
      "rename": micro.ConsulInfo.Email.Rename, //邮箱别名
   }
   m := gomail.NewMessage(
      //发送文本时设置编码,防止乱码。 如果txt文本设置了之后还是乱码,那可以将原txt文本在保存时
      //就选择utf-8格式保存
      gomail.SetEncoding(gomail.Base64),
   )
   m.SetHeader("From", m.FormatAddress(mailConn["user"], mailConn["rename"])) // 添加别名
   m.SetHeader("To", mailTo)                                                  // 发送给用户(可以多个)
   m.SetHeader("Subject", subject)                                            // 设置邮件主题
   m.SetBody("text/html", body)                                               // 设置邮件正文
   /*
      创建SMTP客户端,连接到远程的邮件服务器,需要指定服务器地址、端口号、用户名、密码,如果端口号为465的话,
      自动开启SSL,这个时候需要指定TLSConfig
   */
   d := gomail.NewDialer(mailConn["host"], int(micro.ConsulInfo.Email.Port), mailConn["user"], mailConn["pass"]) // 设置邮件正文
   //d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
   err := d.DialAndSend(m)
   if err != nil {
      return "", err
   }
   return code, nil
}
  • 邮箱主体是用consul获取的,可以自己定义。

四 发送注册邮件

  • 在mail目录下的mail.go文件中,输入以下代码:
// SendRegisterMail 发送注册邮件
func SendRegisterMail(mailTo string) (string, error) {
   rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
   code := fmt.Sprintf("%06v", rnd.Int31n(1000000))
   subject := "欢迎注册"
   body := "欢迎注册,您的邮箱验证码为:" + code + "请复制到注册窗口中完成注册,感谢您的支持。验证码在十分钟内有效"
   return InitSendMail(mailTo, subject, body, code)
}

五 发送重置密码邮件

  • 在mail目录下的mail.go文件中,输入以下代码:
// SendResetPwdMail 发送重置密码邮件
func SendResetPwdMail(mailTo string) (string, error) {
   rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
   code := fmt.Sprintf("%06v", rnd.Int31n(1000000))
   subject := "重置密码"
   body := "欢迎重置密码,您的邮箱验证码为:" + code + "请复制到重置密码窗口中完成重置密码,感谢您的支持。验证码在十分钟内有效"
   return InitSendMail(mailTo, subject, body, code)
}

六 最后

  • 至此,go-micro微服务项目搭建工作就正式完成。
  • 接下来就开始正式的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
相关文章
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
6月前
|
负载均衡 中间件 Go
Golang 微服务工具包 Go kit
Golang 微服务工具包 Go kit
43 0
|
6月前
|
SQL 关系型数据库 Go
Go语言微服务框架 - 12.ORM层的自动抽象与自定义方法的扩展
随着接口参数校验功能的完善,我们能快速定位到接口层面的参数问题;而应用服务的分层代码,也可以通过log的trace-id发现常见的业务逻辑问题。 但在最底层与数据库的操作,也就是对GORM的使用,经常会因为我们不了解ORM的一些细节,导致对数据的CRUD失败,或者没有达到预期效果。这时,我们希望能在ORM这一层也有一个通用的解决方案,来加速问题的排查。
45 0
|
8天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
43 0
|
8天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
32 0
|
4月前
|
Dubbo 应用服务中间件 API
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
随着 Dubbo3 在云原生微服务方向的快速发展,Dubbo 的 go 语言实现迎来了 Dubbo3 版本以来最全面、最大幅度的一次升级,这次升级是全方位的,涉及 API、协议、流量管控、可观测能力等。
|
1月前
|
运维 监控 负载均衡
Go语言中微服务架构设计与原则
【2月更文挑战第14天】本文将深入探讨在Go语言环境下,微服务架构的设计原则和实践。我们将讨论如何根据微服务架构的核心概念,如服务拆分、独立部署、容错处理、服务治理等,来构建一个稳定、可扩展、可维护的Go语言微服务系统。
|
1月前
|
运维 Go 开发者
Go语言基础及其在微服务中的应用
【2月更文挑战第14天】本文旨在探讨Go语言的核心特性及其在构建微服务架构中的实际应用。我们将首先简要介绍Go语言的基本概念与特点,然后详细分析Go语言在构建高性能、高可用微服务中的优势,并通过实例展示如何使用Go语言实现微服务的基础组件和通信机制。
|
6月前
|
Go 微服务
Go 微服务工具包 Go kit 怎么集成 gRPC?
Go 微服务工具包 Go kit 怎么集成 gRPC?
54 0
|
6月前
|
开发框架 Go 微服务
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
126 0