我有708家公司,我需要向他们发送带有登录名和密码的电子邮件,以便在我公司的新web-app上获得授权,他们可以看到与我们公司合作的统计数据和其他信息。问题是我们使用的smtp主机在发送电子邮件时设置了瓶颈,每分钟30封邮件。我真的想不出一个好的方法来处理这个问题。
我可能需要使用gooutine with for循环。
import "gopkg.in/gomail.v2"
const (
FROM = "foo@some.com"
PASSWORD = "bar"
SMTP_HOST = "smtp.google.com"
SMTP_PORT = 465
)
type SendEmail struct {
To string
Subject string
Msg string
}
func (se *SendEmail) Send() error{
m := gomail.NewMessage()
m.SetHeader("From", FROM)
m.SetHeader("To", se.To)
m.SetHeader("Subject", se.Subject)
m.SetBody("text/html", se.Msg)
d := gomail.NewDialer(SMTP_HOST, SMTP_PORT, FROM, PASSWORD)
// Send the email
if err := d.DialAndSend(m); err != nil {
return err
}
return nil
}
type Company struct{
Email string
Login string
Password string
}
func SendNotificartion(companys []Company){
// Send 30 mail every minute
for _, company := range companys {
var send SendEmail
send.To = company.Email
send.Subject = "Some subject"
send.Msg = fmt.Sprintf("Your login:%s and password:%s", company.Login, company.Password)
if err := send.Send(); err != nil{
log.Println(err)
}
}
}
你可以在这里暂停1分钟,然后再发送另一个30包
func SendNotificartion(companys []Company){
// Send 30 mail every minute
var counter = 0
for _, company := range companys {
var send SendEmail
send.To = company.Email
send.Subject = "Some subject"
send.Msg = fmt.Sprintf("Your login:%s and password:%s", company.Login, company.Password)
if err := send.Send(); err != nil{
log.Println(err)
}
counter++
if counter == 30 {
counter = 0
time.Sleep(1 * time.Minute)
}
}