Go简单的邮箱实现
简单的邮件发送实现
const (
HOST = "smtp.163.com"
SERVER_ADDR = "smtp.163.com:25"
USER = "xxxxx@163.com"
PASSWORD = ""
)
type Email struct {
to string "to"
subject string "subject"
msg string "msg"
}
func NewEmail(to,subject,msg string) *Email {
return &Email{to: to,subject: subject,msg: msg}
}
func sendEmail(email *Email) error {
auth := smtp.PlainAuth("",USER,PASSWORD,HOST)
sendTo := strings.Split(email.to,";")
done := make(chan error ,1024)
go func() {
defer close(done)
for _,v := range sendTo{
str := strings.Replace("Form:"+USER+"=To:"+v+"Subject:"+email.subject+"==","=","\r\n",-1)+email.msg
err := smtp.SendMail(
SERVER_ADDR,
auth,
USER,
[]string{v},
[]byte(str),
)
done <- err
}
}()
for i :=0;i<len(sendTo);i++{
<-done
}
return nil
}
func main() {
mycontent := "this is go test email"
email := NewEmail("xx@sina.com;xxx@qq.com","test golang email",mycontent)
err := sendEmail(email)
if err !=nil{
fmt.Println("send email failed err :",err)
return
}
fmt.Println("send email success ...")
fmt.Println(err)
}
使用第三方库实现
package main
import (
"gopkg.in/gomail.v2"
"strconv"
)
func SendMail(mailTo []string,subject string, body string ) error {
//定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码
mailConn := map[string]string {
"user": "xxx@163.com",
"pass": "xxx",
"host": "smtp.163.com",
"port": "25",
}
port, _ := strconv.Atoi(mailConn["port"]) //转换端口类型为int
m := gomail.NewMessage()
m.SetHeader("From","XD Game" + "<" + mailConn["user"] + ">") //这种方式可以添加别名,即“XD Game”, 也可以直接用<code>m.SetHeader("From",mailConn["user"])</code> 读者可以自行实验下效果
m.SetHeader("To", mailTo...) //发送给多个用户
m.SetHeader("Subject", subject) //设置邮件主题
m.SetBody("text/html", body) //设置邮件正文
d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"])
err := d.DialAndSend(m)
return err
}
func main() {
//定义收件人
mailTo := []string {
"xxx@sina.com",
"ss2@qq.com",
}
//邮件主题为"Hello"
subject := "Hello"
// 邮件正文
body := "Good"
SendMail(mailTo, subject, body)
}

浙公网安备 33010602011771号