golang 发送邮件

golang发送邮件插件实现,有时候会返回错误554,有可能是主题或者内容中包含了一些被认为是垃圾的词语,换一个表达试一试。以下亲测qq邮箱和126邮箱正常。

package email

import (
    "net/smtp"
    "strings"
)

const MAIL_HTML = "html"
const MAIL_TEXT = "text"

type Auth struct {
    SMTP     string // just like ip:port, e.g smtp.example.com:25
    Username string
    Password string
    auth     smtp.Auth
}

var DefaultMailSender = NewAuth("", "", "")

func NewAuth(addr string, username string, password string) *Auth {
    var domain string
    addrStrings := strings.Split(addr, ":")
    if len(addrStrings) > 0 {
        domain = addrStrings[0]
    }
    auth := smtp.PlainAuth("", username, password, domain)
    return &Auth{
        SMTP:     addr,
        Username: username,
        Password: password,
        auth:     auth,
    }
}

func SendEmail(subject string, from string, to []string, mailType string, message string) error {
    return DefaultMailSender.SendEmail(subject, from, to, mailType, message)
}

func (a *Auth) SendEmail(subject string, from string, to []string, mailType string, message string) error {
    var contentType = "text/plain; charset=UTF-8"
    if mailType == MAIL_HTML {
        contentType = "text/html; charset=UTF-8"
    }
    var msg = "To: " + strings.Join(to, ",") + "\r\n" +
        "From: " + from + "\r\n" +
        "Subject: " + subject + "\r\n" +
        "Content-Type: " + contentType + "\r\n\r\n" +
        message + "\r\n"
    return smtp.SendMail(a.SMTP, a.auth, from, to, []byte(msg))
}

测试发送:

func TestSendEmail(t *testing.T) {
    DefaultMailSender = NewAuth("smtp.126.com:25", "xxx@126.com", "xxx")

    // send text to a person.
    var err error
    err = SendEmail("golang的警报邮件", "xxx@126.com", []string{"xxx@qq.com"}, MAIL_TEXT, "你猜我能不能把邮件发送出去")
    if err != nil {
        t.Error(err)
        return
    }

    // send text to 3 person.
    err = SendEmail("golang的警报邮件", "xxx@126.com", []string{"xxx@qq.com", "xxx@qq.com", "xxx@126.com"}, MAIL_TEXT, "你猜我能不能把邮件发送出去")
    if err != nil {
        t.Error(err)
        return
    }

    // send html to a person
    err = SendEmail("golang的警报邮件", "xxx@126.com", []string{"xxx@qq.com"}, MAIL_HTML, "<h1>你好啊朋友</h1>")
    if err != nil {
        t.Error(err)
        return
    }
    log.D("TestSendEmail test success")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值