最近在搞 linux 自动发邮件的事,之前使用了 smstp 发送 gmail 不过这种方式感觉和我需要的有一点差距,所以打算使用 golang 进行发送邮件。因为 gmail 的 smtp 是必须 TLS 的,所以我在网上查阅了一下资料。发现了一篇不错的代码。然后稍微定制了一下。
参考地址 https://hackernoon.com/golang-sendmail-sending-mail-through-net-smtp-package-5cadbe2670e0
直接上代码
https://github.com/elissa2333/library/blob/master/gmail.go
package gmail
import (
"crypto/tls"
"fmt"
"log"
"net/smtp"
)
type mail struct {
user string
passwd string
}
func check(err error) {
if err != nil {
log.Panic(err)
}
}
//初始化用户名和密码
func New(u string, p string) mail {
temp := mail{user: u, passwd: p}
return temp
}
//标题 文本 目标邮箱
func (m mail) Send(title string, text string, toId string) {
auth := smtp.PlainAuth("", m.user, m.passwd, "smtp.gmail.com")
tlsconfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: "smtp.gmail.com",
}
conn, err := tls.Dial("tcp", "smtp.gmail.com:465", tlsconfig)
check(err)
client, err := smtp.NewClient(conn, "smtp.gmail.com")
check(err)
if err = client.Auth(auth); err != nil {
log.Panic(err)
}
if err = client.Mail(m.user); err != nil {
log.Panic(err)
}
if err = client.Rcpt(toId); err != nil {
log.Panic(err)
}
w, err := client.Data()
check(err)
msg := fmt.Sprintf("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s", m.user, toId, title, text)
_, err = w.Write([]byte(msg))
check(err)
err = w.Close()
check(err)
client.Quit()
}
然后调用它
package main
import(
"gmail"
)
func main(){
foo := gmail.New("[email protected]","passwd") //自己的邮箱地址和密码
foo.Send("标题","邮箱内容","[email protected]") //邮件标题 邮件内容 需要发送到的邮箱地址
}