|
@@ -1,8 +1,7 @@
|
|
|
package mail
|
|
|
|
|
|
import (
|
|
|
- "log"
|
|
|
- "qfw/util"
|
|
|
+ "sync"
|
|
|
|
|
|
"github.com/go-gomail/gomail"
|
|
|
)
|
|
@@ -14,8 +13,17 @@ type GmailAuth struct {
|
|
|
Pwd string //密码
|
|
|
}
|
|
|
|
|
|
+var mailLock = &sync.Mutex{}
|
|
|
+var dialer *gomail.Dialer
|
|
|
+
|
|
|
+func getDialer(flag bool, auth *GmailAuth) *gomail.Dialer {
|
|
|
+ if flag && dialer != nil {
|
|
|
+ return dialer
|
|
|
+ }
|
|
|
+ dialer = gomail.NewPlainDialer(auth.SmtpHost, auth.SmtpPort, auth.User, auth.Pwd) // 发送邮件服务器、端口、发件人账号、发件人密码
|
|
|
+ return dialer
|
|
|
+}
|
|
|
func GSendMail(from, to, cc, bcc, subject, body, fname, rename string, auth *GmailAuth) bool {
|
|
|
- defer util.Catch()
|
|
|
m := gomail.NewMessage()
|
|
|
m.SetAddressHeader("From", auth.User, from) // 发件人
|
|
|
m.SetHeader("To",
|
|
@@ -33,11 +41,17 @@ func GSendMail(from, to, cc, bcc, subject, body, fname, rename string, auth *Gma
|
|
|
m.Attach(fname, gomail.Rename(rename), gomail.SetHeader(h)) //添加附件
|
|
|
//m.Attach(fname) //添加附件
|
|
|
}
|
|
|
- d := gomail.NewPlainDialer(auth.SmtpHost, auth.SmtpPort, auth.User, auth.Pwd) // 发送邮件服务器、端口、发件人账号、发件人密码
|
|
|
- if err := d.DialAndSend(m); err != nil {
|
|
|
- log.Println("发送邮件出错", err.Error())
|
|
|
- return false
|
|
|
- } else {
|
|
|
- return true
|
|
|
+ return gSend(auth, m)
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+func gSend(auth *GmailAuth, m *gomail.Message) bool {
|
|
|
+ mailLock.Lock()
|
|
|
+ defer mailLock.Unlock()
|
|
|
+ for i := 0; i < 2; i++ {
|
|
|
+ if err := getDialer(i == 0, auth).DialAndSend(m); err == nil {
|
|
|
+ return true
|
|
|
+ }
|
|
|
}
|
|
|
+ return false
|
|
|
}
|