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

  

posted @ 2021-01-22 10:26  pebblecome  阅读(295)  评论(0)    收藏  举报