diff --git a/config.example.json b/config.example.json index 84c03eb..fbf332b 100644 --- a/config.example.json +++ b/config.example.json @@ -5,6 +5,7 @@ "qq_send_group": [], "qq_msg": "", "mail_list": [], + "mail_title": "摇篮系统已触发", "smtp_config": { "host": "", "port": 465, diff --git a/configs/config.go b/configs/config.go index 810d935..ced29b2 100644 --- a/configs/config.go +++ b/configs/config.go @@ -12,6 +12,7 @@ type Config struct { QQSendGroup []int `json:"qq_send_group"` QQMsg string `json:"qq_msg"` MailList []string `json:"mail_list"` + MailTitle string `json:"mail_title"` SMTPConfig SMTPConfig `json:"smtp_config"` MailContent string `json:"mail_content"` } @@ -20,7 +21,7 @@ type SMTPConfig struct { Host string `json:"host"` Port int `json:"port"` User string `json:"user"` - Password string `json:"password"` + Password string `json:"pass"` } func GetConfig() (config Config, err error) { diff --git a/go.mod b/go.mod index 14d8a61..48127cf 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,13 @@ module github.com/ssdomei232/goodBaby -go 1.23.4 +go 1.24.0 -require github.com/gin-gonic/gin v1.11.0 +toolchain go1.24.7 + +require ( + github.com/gin-gonic/gin v1.11.0 + github.com/wneessen/go-mail v0.7.2 +) require ( github.com/bytedance/sonic v1.14.0 // indirect @@ -28,12 +33,12 @@ require ( github.com/ugorji/go/codec v1.3.0 // indirect go.uber.org/mock v0.5.0 // indirect golang.org/x/arch v0.20.0 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/mod v0.25.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.17.0 // indirect golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.27.0 // indirect - golang.org/x/tools v0.34.0 // indirect + golang.org/x/text v0.29.0 // indirect + golang.org/x/tools v0.36.0 // indirect google.golang.org/protobuf v1.36.9 // indirect ) diff --git a/go.sum b/go.sum index a25fff5..53ab2c3 100644 --- a/go.sum +++ b/go.sum @@ -61,25 +61,27 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA= github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +github.com/wneessen/go-mail v0.7.2 h1:xxPnhZ6IZLSgxShebmZ6DPKh1b6OJcoHfzy7UjOkzS8= +github.com/wneessen/go-mail v0.7.2/go.mod h1:+TkW6QP3EVkgTEqHtVmnAE/1MRhmzb8Y9/W3pweuS+k= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= -golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= -golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= -golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/sendMail.go b/internal/sendMail.go new file mode 100644 index 0000000..d438928 --- /dev/null +++ b/internal/sendMail.go @@ -0,0 +1,56 @@ +package internal + +import ( + "fmt" + "log" + + "github.com/ssdomei232/goodBaby/configs" + "github.com/wneessen/go-mail" +) + +func SendMail() { + config, err := configs.GetConfig() + if err != nil { + log.Printf("获取配置文件失败: %v", err) + } + for _, address := range config.MailList { + sendMailMsg(address, config.MailContent) + } +} + +func sendMailMsg(address string, msg string) { + config, err := configs.GetConfig() + if err != nil { + log.Printf("获取配置文件失败: %v", err) + } + + mailMsg := fmt.Sprintf("Hello,\nThis is a test email sent from Go!%s", msg) + + client, err := mail.NewClient( + config.SMTPConfig.Host, + mail.WithPort(config.SMTPConfig.Port), + mail.WithSSL(), + mail.WithUsername(config.SMTPConfig.User), + mail.WithPassword(config.SMTPConfig.Password), + mail.WithSMTPAuth(mail.SMTPAuthPlain), + ) + if err != nil { + log.Println(err) + return + } + + // 创建邮件 + message := mail.NewMsg() + message.From(config.SMTPConfig.User) + message.To(address) + message.Subject(config.MailTitle) + message.SetBodyString(mail.TypeTextPlain, mailMsg) + + // 发送邮件 + if err := client.DialAndSend(message); err != nil { + log.Println(err) + return + } + + fmt.Println("Email sent successfully!") +} diff --git a/internal/sendQQMsg.go b/internal/sendQQMsg.go index 92c1883..d888684 100644 --- a/internal/sendQQMsg.go +++ b/internal/sendQQMsg.go @@ -12,26 +12,26 @@ import ( "github.com/ssdomei232/goodBaby/configs" ) -func SendQQMsg() { +func SendQQ() { config, err := configs.GetConfig() if err != nil { log.Printf("获取配置文件失败: %v", err) } - url := fmt.Sprintf("%s/%s", config.CatBotUrl, config.CatBotKey) + url := fmt.Sprintf("%s/?secret=%s", config.CatBotUrl, config.CatBotKey) for _, groupId := range config.QQSendGroup { - sendMsg(url, groupId, config.QQMsg) + sendQQMsg(url, groupId, config.QQMsg) } } -func sendMsg(url string, groupId int, msg string) { +func sendQQMsg(url string, groupId int, msg string) { method := "POST" payload := &bytes.Buffer{} writer := multipart.NewWriter(payload) _ = writer.WriteField("group_id", strconv.Itoa(groupId)) - _ = writer.WriteField("message", msg) + _ = writer.WriteField("message", msg) //TODO: 发送死亡区间 err := writer.Close() if err != nil { log.Println(err) diff --git a/main.go b/main.go index 862a014..d4dd557 100644 --- a/main.go +++ b/main.go @@ -17,7 +17,7 @@ func init() { if err != nil { log.Printf("获取配置文件失败: %v", err) } - duration = time.Duration(config.DisconnectDuration) * time.Hour + duration = time.Duration(config.DisconnectDuration) * time.Second timer = time.NewTimer(duration) go func() { <-timer.C @@ -26,7 +26,8 @@ func init() { } func trigger() { - go internal.SendQQMsg() + go internal.SendQQ() + go internal.SendMail() } func main() {