diff --git a/common/email.go b/common/email.go index af8a57a4..e17e296b 100644 --- a/common/email.go +++ b/common/email.go @@ -1,6 +1,7 @@ package common import ( + "crypto/tls" "fmt" "net/smtp" "strings" @@ -15,6 +16,47 @@ func SendEmail(subject string, receiver string, content string) error { auth := smtp.PlainAuth("", SMTPAccount, SMTPToken, SMTPServer) addr := fmt.Sprintf("%s:%d", SMTPServer, SMTPPort) to := strings.Split(receiver, ";") - err := smtp.SendMail(addr, auth, SMTPAccount, to, mail) + var err error + if SMTPPort == 465 { + tlsConfig := &tls.Config{ + InsecureSkipVerify: true, + ServerName: SMTPServer, + } + conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", SMTPServer, SMTPPort), tlsConfig) + if err != nil { + return err + } + client, err := smtp.NewClient(conn, SMTPServer) + if err != nil { + return err + } + defer client.Close() + if err = client.Auth(auth); err != nil { + return err + } + if err = client.Mail(SMTPFrom); err != nil { + return err + } + receiverEmails := strings.Split(receiver, ";") + for _, receiver := range receiverEmails { + if err = client.Rcpt(receiver); err != nil { + return err + } + } + w, err := client.Data() + if err != nil { + return err + } + _, err = w.Write(mail) + if err != nil { + return err + } + err = w.Close() + if err != nil { + return err + } + } else { + err = smtp.SendMail(addr, auth, SMTPAccount, to, mail) + } return err }