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)
}
