1.实现方式
使用golang使用qq邮箱的第三方发送邮件方式,需获取qq邮箱密钥(不是密码)。
python有收发邮件版本:https://www.ljsea.top/2023/11/21/python%e9%82%ae%e4%bb%b6%e4%bb%a3%e7%90%86%e5%ae%a2%e6%88%b7%e7%ab%af/
2.代码
发送封装邮件:
package main
import (
"fmt"
"log"
"net/smtp"
)
type MyEmail struct {
SmtpPort int
ImapPort int
SmtpHost string
SmtpUserName string
SmtpPassword string
}
func (e *MyEmail) Send(title, content string, toEmail []string) error {
// 设置邮件头部
header := make(map[string]string)
header["From"] = e.SmtpUserName
header["To"] = toEmail[0]
header["Subject"] = title
// 组装邮件消息
message := ""
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + content
// 发送邮件
err := smtp.SendMail(e.SmtpHost, smtp.PlainAuth("", e.SmtpUserName, e.SmtpPassword, "pop.qq.com"), e.SmtpUserName, toEmail, []byte(message))
if err != nil {
log.Fatalf("smtp error: %s", err)
}
return nil
}
测试代码:
var em MyEmail
em.SmtpPassword = "nihzazdkmuctdhid"
em.SmtpHost = "pop.qq.com:587"
em.SmtpUserName = "354425203@qq.com"
em.SmtpPort = 587
em.ImapPort = 993
title := "设备状态异常"
content := "设备状态异常\n设备: home server\t时间:" + time.Now().String()
err := em.Send(title, content, []string{"3236990479@qq.com", "lijun@ljsea.top"})
if err != nil {
fmt.Println(err)
}