|
@@ -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(SMTPAccount); 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
|
|
|
}
|