• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Go语言轻松实现邮件发送通知功能的完全指南

    发布者: 涵韵3588 | 发布时间: 2025-8-14 12:52| 查看数: 64| 评论数: 0|帖子模式

    在现代 Web 应用中,邮件通知是一个不可或缺的功能,无论是用户注册、密码重置,还是系统报警,邮件都能提供及时的信息传递。在这篇文章中,我们将深入解析一个基于 Go 语言
    1. smtp
    复制代码
    协议和
    1. email
    复制代码
    库的邮件发送工具,并提供详细的代码示例,助你快速集成邮件功能!

    Go 语言如何发送邮件

    在 Go 语言中,可以使用
    1. net/smtp
    复制代码
    标准库发送邮件,但它的 API 设计较为底层,使用起来相对麻烦。因此,我们借助 jordan-wright/email 库来简化邮件发送逻辑,使其更易读、更易用。
    本文基于
    1. gin-vue-admin
    复制代码
    框架的插件封装了邮件发送工具,支持普通邮件发送、错误告警邮件、邮件测试等功能。

    代码实现解析

    首先,我们来看核心代码:
    1. package utils

    2. import (
    3.     "crypto/tls"
    4.     "fmt"
    5.     "net/smtp"
    6.     "strings"

    7.     "github.com/flipped-aurora/gin-vue-admin/server/plugin/email/global"
    8.     "github.com/jordan-wright/email"
    9. )

    10. // 发送邮件的主方法
    11. func send(to []string, subject string, body string) error {
    12.     from := global.GlobalConfig.From
    13.     nickname := global.GlobalConfig.Nickname
    14.     secret := global.GlobalConfig.Secret
    15.     host := global.GlobalConfig.Host
    16.     port := global.GlobalConfig.Port
    17.     isSSL := global.GlobalConfig.IsSSL

    18.     auth := smtp.PlainAuth("", from, secret, host)
    19.     e := email.NewEmail()
    20.     if nickname != "" {
    21.         e.From = fmt.Sprintf("%s <%s>", nickname, from)
    22.     } else {
    23.         e.From = from
    24.     }
    25.     e.To = to
    26.     e.Subject = subject
    27.     e.HTML = []byte(body)

    28.     var err error
    29.     hostAddr := fmt.Sprintf("%s:%d", host, port)
    30.     if isSSL {
    31.         err = e.SendWithTLS(hostAddr, auth, &tls.Config{ServerName: host})
    32.     } else {
    33.         err = e.Send(hostAddr, auth)
    34.     }
    35.     return err
    36. }

    37. // 普通邮件发送方法
    38. func Email(To, subject, body string) error {
    39.     to := strings.Split(To, ",")
    40.     return send(to, subject, body)
    41. }

    42. // 发送错误告警邮件
    43. func ErrorToEmail(subject, body string) error {
    44.     to := strings.Split(global.GlobalConfig.To, ",")
    45.     if to[len(to)-1] == "" {
    46.         to = to[:len(to)-1]
    47.     }
    48.     return send(to, subject, body)
    49. }

    50. // 测试邮件发送方法
    51. func EmailTest(subject, body string) error {
    52.     to := []string{global.GlobalConfig.To}
    53.     return send(to, subject, body)
    54. }
    复制代码
    如何使用

    要使用此工具发送邮件,你需要先配置 SMTP 邮件服务器信息,例如 Gmail、QQ 邮箱、企业邮箱等。

    1、配置邮件服务信息

    1. global.GlobalConfig
    复制代码
    中,添加 SMTP 服务器的配置信息,例如:
    1. GlobalConfig = struct {
    2.     From     string
    3.     Nickname string
    4.     Secret   string
    5.     Host     string
    6.     Port     int
    7.     IsSSL    bool
    8.     To       string
    9. }{
    10.     From:     "your_email@example.com",
    11.     Nickname: "Go Mailer",
    12.     Secret:   "your_smtp_secret", // QQ/163/Gmail 需要使用授权码
    13.     Host:     "smtp.example.com",
    14.     Port:     465,
    15.     IsSSL:    true,
    16.     To:       "receiver@example.com",
    17. }
    复制代码
    2、发送邮件示例

    以下是调用邮件工具发送邮件的示例:
    发送普通邮件
    1. err := utils.Email("receiver@example.com", "Go 邮件测试", "<h1>Hello from Go!</h1>")
    2. if err != nil {
    3.     fmt.Println("邮件发送失败:", err)
    4. } else {
    5.     fmt.Println("邮件发送成功!")
    6. }
    复制代码
    发送错误告警邮件
    1. err := utils.ErrorToEmail("系统错误", "<p>检测到异常,请立即处理!</p>")
    2. if err != nil {
    3.     fmt.Println("告警邮件发送失败:", err)
    4. } else {
    5.     fmt.Println("告警邮件发送成功!")
    6. }
    复制代码
    发送测试邮件
    1. err := utils.EmailTest("测试邮件", "<p>这是一封测试邮件</p>")
    2. if err != nil {
    3.     fmt.Println("测试邮件发送失败:", err)
    4. } else {
    5.     fmt.Println("测试邮件发送成功!")
    6. }
    复制代码
    常见问题排查

    1.邮件无法发送,返回身份验证失败?检查
    1. Secret
    复制代码
    是否正确,某些邮箱(如 QQ 邮箱)需要使用 SMTP 授权码,而非密码。
    2.邮件发送成功,但内容为空?确保
    1. body
    复制代码
    内容正确,HTML 格式的邮件需要
    1. <html>
    复制代码
    标签包裹内容。
    3.Gmail/QQ 邮箱发送失败?确保 SMTP 服务器地址正确,例如:

    • Gmail:
      1. smtp.gmail.com
      复制代码
      ,端口
      1. 465
      复制代码
      (SSL)或
      1. 587
      复制代码
      (TLS)
    • QQ 邮箱:
      1. smtp.qq.com
      复制代码
      ,端口
      1. 465
      复制代码
      (SSL)

    总结

    本篇文章介绍了如何使用 Go 语言通过
    1. smtp
    复制代码
    发送邮件,并提供了完整的代码实现。无论是普通邮件、错误告警邮件,还是测试邮件,这个工具都能轻松搞定!
    到此这篇关于Go语言轻松实现邮件发送通知功能的完全指南的文章就介绍到这了,更多相关Go邮件发送通知内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表