|
|
@@ -0,0 +1,71 @@
|
|
|
+package mail
|
|
|
+
|
|
|
+// Installation
|
|
|
+// go get github.com/jordan-wright/email
|
|
|
+
|
|
|
+// Note: Version > 1 of this library requires Go v1.5 or above.
|
|
|
+
|
|
|
+// If you need compatibility with previous Go versions, you can use the previous package at gopkg.in/jordan-wright/email.v1
|
|
|
+// Sending email using Gmail
|
|
|
+//
|
|
|
+// e := email.NewEmail()
|
|
|
+// e.From = "Jordan Wright <test@gmail.com>"
|
|
|
+// e.To = []string{"test@example.com"}
|
|
|
+// e.Bcc = []string{"test_bcc@example.com"}
|
|
|
+// e.Cc = []string{"test_cc@example.com"}
|
|
|
+// e.Subject = "Awesome Subject"
|
|
|
+// e.Text = []byte("Text Body is, of course, supported!")
|
|
|
+// e.HTML = []byte("<h1>Fancy HTML is supported, too!</h1>")
|
|
|
+// e.Send("smtp.gmail.com:587", smtp.PlainAuth("", "test@gmail.com", "password123", "smtp.gmail.com"))
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "net/smtp"
|
|
|
+
|
|
|
+ emailPKG "github.com/jordan-wright/email"
|
|
|
+ "github.com/runningwater/gohub/pkg/logger"
|
|
|
+)
|
|
|
+
|
|
|
+// SMTP 实现 email.Driver 接口
|
|
|
+// 使用 github.com/jordan-wright/email 库实现 SMTP 协议邮件发送
|
|
|
+type SMTP struct{}
|
|
|
+
|
|
|
+// Send 发送邮件
|
|
|
+// 参数 config 需包含以下配置项:
|
|
|
+//
|
|
|
+// host - SMTP 服务器地址
|
|
|
+// port - SMTP 端口
|
|
|
+// username - 认证用户名
|
|
|
+// password - 认证密码
|
|
|
+//
|
|
|
+// 返回 bool 表示邮件是否成功投递到服务器
|
|
|
+func (s *SMTP) Send(email Email, config map[string]string) bool {
|
|
|
+ // 实现发送邮件的逻辑
|
|
|
+ e := emailPKG.NewEmail()
|
|
|
+ e.From = fmt.Sprintf("%s <%s>", email.From.Name, email.From.Address)
|
|
|
+ e.To = email.To
|
|
|
+ e.Bcc = email.Bcc
|
|
|
+ e.Cc = email.Cc
|
|
|
+ e.Subject = email.Subject
|
|
|
+ e.Text = email.Text
|
|
|
+ e.HTML = email.HTML
|
|
|
+
|
|
|
+ logger.DebugJSON("发送邮件", "发送详情", e)
|
|
|
+
|
|
|
+ if err := e.Send(
|
|
|
+ fmt.Sprintf("%v:%v", config["host"], config["port"]),
|
|
|
+ smtp.PlainAuth(
|
|
|
+ "",
|
|
|
+ config["username"],
|
|
|
+ config["password"],
|
|
|
+ config["host"],
|
|
|
+ ),
|
|
|
+ ); err != nil {
|
|
|
+ logger.ErrorString("发送邮件", "发送邮件失败", err.Error())
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ // 成功时记录简略日志,避免泄露敏感内容
|
|
|
+ logger.DebugString("发送邮件", "投递状态", "服务器已接收邮件")
|
|
|
+ return true
|
|
|
+}
|