Files
exchange_go/pkg/emailhelper/emailhelper.go

212 lines
6.3 KiB
Go
Raw Normal View History

2025-02-06 11:14:33 +08:00
package emailhelper
import (
"errors"
"fmt"
"go-admin/config"
"go-admin/pkg/utility"
"regexp"
"sync"
log "github.com/go-admin-team/go-admin-core/logger"
"github.com/mailjet/mailjet-apiv3-go"
"go.uber.org/zap"
"gopkg.in/gomail.v2"
)
var (
cacheEmail = make(map[string]*gomail.Dialer)
mu = sync.RWMutex{}
)
// getGoMailIn 邮件连接池
func getGoMailIn(key string) *gomail.Dialer {
mu.RLock()
defer mu.RUnlock()
item, ok := cacheEmail[key]
if ok {
return item
}
return nil
}
// CheckIsEmail 检测是否是邮箱
func CheckIsEmail(email string) bool {
if email == `` {
return false
}
pattern := `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` // 匹配电子邮箱
reg := regexp.MustCompile(pattern)
return reg.MatchString(email)
}
// SendFrontedEmail 发送邮件
2025-02-27 15:05:34 +08:00
func SendFrontedEmail(toEmail string, code string, subject, body string) error {
2025-02-06 11:14:33 +08:00
// 邮箱配置
from := config.ExtConfig.EmailConfig.MailFrom // 发送者邮箱
password := config.ExtConfig.EmailConfig.MailSmtpPass // Gmail 密码或应用专用密码
to := toEmail // 收件人邮箱
smtpHost := config.ExtConfig.EmailConfig.MailSmtpHost // Gmail SMTP 服务器
smtpPort := config.ExtConfig.EmailConfig.MailSmtpPort // SMTP 端口
m := gomail.NewMessage()
m.SetHeader("From", from) // 发件人
m.SetHeader("To", to) // 收件人
m.SetHeader("Subject", subject) // 邮件主题
m.SetBody("text/html", body) // 邮件内容(纯文本)
// 设置 SMTP 服务器信息
d := gomail.NewDialer(smtpHost, utility.StringToInt(smtpPort), from, password)
// 发送邮件
if err := d.DialAndSend(m); err != nil {
log.Error("发送邮件失败: %v", err)
return err
}
return nil
}
2025-02-19 10:38:29 +08:00
// SendNoticeEmail 发送通知邮件
func SendNoticeEmail(toEmail string, chain string, symbol string, pair string) error {
// 邮箱配置
from := config.ExtConfig.EmailConfig.MailFrom // 发送者邮箱
password := config.ExtConfig.EmailConfig.MailSmtpPass // Gmail 密码或应用专用密码
to := toEmail // 收件人邮箱
smtpHost := config.ExtConfig.EmailConfig.MailSmtpHost // Gmail SMTP 服务器
smtpPort := config.ExtConfig.EmailConfig.MailSmtpPort // SMTP 端口
//from = "daichaodsy@163.com"
//password = "QCKTZWTREARMGDZN"
//smtpPort = "465"
//smtpHost = "smtp.163.com"
//link := fmt.Sprintf("%s/verify?email=%s&verify_code=%s&type=register", config.ExtConfig.Domain, toEmail, code)
// 创建邮件消息
subject := "新币发布通知"
body := fmt.Sprintf("<h1>代币发布</h1><p> 区块链信息: %s <p> 交易对: %s </p> <p> 合约地址: %s </p> </p>", chain, symbol, pair)
m := gomail.NewMessage()
m.SetHeader("From", from) // 发件人
m.SetHeader("To", to) // 收件人
m.SetHeader("Subject", subject) // 邮件主题
m.SetBody("text/html", body) // 邮件内容(纯文本)
// 设置 SMTP 服务器信息
d := gomail.NewDialer(smtpHost, utility.StringToInt(smtpPort), from, password)
// 发送邮件
if err := d.DialAndSend(m); err != nil {
log.Error("发送邮件失败: %v", err)
return err
}
return nil
}
2025-02-06 11:14:33 +08:00
// SendEmail 发送邮件
//func SendEmail(send config.EmailSend) (string, bool) {
// m := gomail.NewMessage()
// m.SetHeader("From", m.FormatAddress(send.From, send.Username)) // 这里等软件名字定下来以后使用多语言配置具体名称
// m.SetHeader("To", send.To) // "bob@example.com", "cora@example.com")
// // m.SetAddressHeader("Cc", "dan@example.com", "Dan")
// m.SetHeader("Subject", send.Subject)
// m.SetBody("text/html", send.Content) // "Hello <b>Bob</b> and <i>Cora</i>!")
// // m.Attach("/home/Alex/lolcat.jpg")
// key := send.Server + send.From
// gmailClient := getGoMailIn(key)
// if gmailClient == nil {
// mu.Lock()
// d := gomail.NewDialer(send.Server, send.Port, send.From, send.Secret)
// d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
// cacheEmail[key] = d
// mu.Unlock()
// gmailClient = d
// }
//
// // Send the email to Bob, Cora and Dan.
// if err := gmailClient.DialAndSend(m); err != nil {
// log.Error("d.DialAndSend", zap.Error(err))
// return "发送失败", false
// }
//
// return "", true
//}
var (
apiKeyPublic = "00d2889da90d5d90767bf04dc1bdc6fa"
apiKeyPrivate = "f68cd84cd88b7e2aabce79c878a77e97"
)
func MailJetSend(receive string, code string) error {
mailjetClient := mailjet.NewMailjetClient(apiKeyPublic, apiKeyPrivate) //"00d2889da90d5d90767bf04dc1bdc6fa", "f68cd84cd88b7e2aabce79c878a77e97")
messagesInfo := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{
Email: "email@tokex.shop",
Name: "Tokex",
},
To: &mailjet.RecipientsV31{
mailjet.RecipientV31{
Email: receive,
Name: "",
},
},
Subject: "【Tokex】邮箱验证码",
TextPart: "您的邮箱验证码为:" + code,
// HTMLPart: "<h3>欢迎注册登录我们的服务您的验证码为1234567</h3><br />May the delivery force be with you!",
// CustomID: "AppGettingStartedTest",
// TemplateID: 1234,
},
}
messages := mailjet.MessagesV31{Info: messagesInfo}
res, err := mailjetClient.SendMailV31(&messages)
if err != nil {
log.Error("MailJetSend", zap.Error(err))
return err
}
// fmt.Printf("Data: %+v\n", res)
if res.ResultsV31[0].Status != "success" {
log.Error("发送失败", zap.Any("resilt", res))
return errors.New("发送失败")
}
return nil
}
func MailJetSendMsg(receive string, subject, textPart string) error {
mailjetClient := mailjet.NewMailjetClient(apiKeyPublic, apiKeyPrivate) //"00d2889da90d5d90767bf04dc1bdc6fa", "f68cd84cd88b7e2aabce79c878a77e97")
messagesInfo := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{
Email: "email@tokex.shop",
Name: "Tokex",
},
To: &mailjet.RecipientsV31{
mailjet.RecipientV31{
Email: receive,
Name: "",
},
},
Subject: subject,
TextPart: textPart,
},
}
messages := mailjet.MessagesV31{Info: messagesInfo}
res, err := mailjetClient.SendMailV31(&messages)
if err != nil {
log.Error("MailJetSend", zap.Error(err))
return err
}
// fmt.Printf("Data: %+v\n", res)
if res.ResultsV31[0].Status != "success" {
log.Error("发送失败", zap.Any("resilt", res))
return errors.New("发送失败")
}
return nil
}