108人参与 • 2025-04-24 • Golang
在现代 web 应用中,邮件通知是一个不可或缺的功能,无论是用户注册、密码重置,还是系统报警,邮件都能提供及时的信息传递。在这篇文章中,我们将深入解析一个基于 go 语言 smtp 协议和 email 库的邮件发送工具,并提供详细的代码示例,助你快速集成邮件功能!
在 go 语言中,可以使用 net/smtp 标准库发送邮件,但它的 api 设计较为底层,使用起来相对麻烦。因此,我们借助 jordan-wright/email 库来简化邮件发送逻辑,使其更易读、更易用。
本文基于 gin-vue-admin 框架的插件封装了邮件发送工具,支持普通邮件发送、错误告警邮件、邮件测试等功能。
首先,我们来看核心代码:
package utils
import (
"crypto/tls"
"fmt"
"net/smtp"
"strings"
"github.com/flipped-aurora/gin-vue-admin/server/plugin/email/global"
"github.com/jordan-wright/email"
)
// 发送邮件的主方法
func send(to []string, subject string, body string) error {
from := global.globalconfig.from
nickname := global.globalconfig.nickname
secret := global.globalconfig.secret
host := global.globalconfig.host
port := global.globalconfig.port
isssl := global.globalconfig.isssl
auth := smtp.plainauth("", from, secret, host)
e := email.newemail()
if nickname != "" {
e.from = fmt.sprintf("%s <%s>", nickname, from)
} else {
e.from = from
}
e.to = to
e.subject = subject
e.html = []byte(body)
var err error
hostaddr := fmt.sprintf("%s:%d", host, port)
if isssl {
err = e.sendwithtls(hostaddr, auth, &tls.config{servername: host})
} else {
err = e.send(hostaddr, auth)
}
return err
}
// 普通邮件发送方法
func email(to, subject, body string) error {
to := strings.split(to, ",")
return send(to, subject, body)
}
// 发送错误告警邮件
func errortoemail(subject, body string) error {
to := strings.split(global.globalconfig.to, ",")
if to[len(to)-1] == "" {
to = to[:len(to)-1]
}
return send(to, subject, body)
}
// 测试邮件发送方法
func emailtest(subject, body string) error {
to := []string{global.globalconfig.to}
return send(to, subject, body)
}
要使用此工具发送邮件,你需要先配置 smtp 邮件服务器信息,例如 gmail、qq 邮箱、企业邮箱等。
在 global.globalconfig 中,添加 smtp 服务器的配置信息,例如:
globalconfig = struct {
from string
nickname string
secret string
host string
port int
isssl bool
to string
}{
from: "your_email@example.com",
nickname: "go mailer",
secret: "your_smtp_secret", // qq/163/gmail 需要使用授权码
host: "smtp.example.com",
port: 465,
isssl: true,
to: "receiver@example.com",
}
以下是调用邮件工具发送邮件的示例:
发送普通邮件
err := utils.email("receiver@example.com", "go 邮件测试", "<h1>hello from go!</h1>")
if err != nil {
fmt.println("邮件发送失败:", err)
} else {
fmt.println("邮件发送成功!")
}
发送错误告警邮件
err := utils.errortoemail("系统错误", "<p>检测到异常,请立即处理!</p>")
if err != nil {
fmt.println("告警邮件发送失败:", err)
} else {
fmt.println("告警邮件发送成功!")
}
发送测试邮件
err := utils.emailtest("测试邮件", "<p>这是一封测试邮件</p>")
if err != nil {
fmt.println("测试邮件发送失败:", err)
} else {
fmt.println("测试邮件发送成功!")
}
1.邮件无法发送,返回身份验证失败?检查 secret 是否正确,某些邮箱(如 qq 邮箱)需要使用 smtp 授权码,而非密码。
2.邮件发送成功,但内容为空?确保 body 内容正确,html 格式的邮件需要 <html> 标签包裹内容。
3.gmail/qq 邮箱发送失败?确保 smtp 服务器地址正确,例如:
smtp.gmail.com,端口 465(ssl)或 587(tls)smtp.qq.com,端口 465(ssl)本篇文章介绍了如何使用 go 语言通过 smtp 发送邮件,并提供了完整的代码实现。无论是普通邮件、错误告警邮件,还是测试邮件,这个工具都能轻松搞定!
到此这篇关于go语言轻松实现邮件发送通知功能的完全指南的文章就介绍到这了,更多相关go邮件发送通知内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论