Просмотр исходного кода

[fix] fix send email error using outlook smtp

Oswin 1 год назад
Родитель
Сommit
da490db6d3
2 измененных файлов с 35 добавлено и 0 удалено
  1. 32 0
      common/email-outlook-auth.go
  2. 3 0
      common/email.go

+ 32 - 0
common/email-outlook-auth.go

@@ -0,0 +1,32 @@
+package common
+
+import (
+	"errors"
+	"net/smtp"
+)
+
+type outlookAuth struct {
+	username, password string
+}
+
+func LoginAuth(username, password string) smtp.Auth {
+	return &outlookAuth{username, password}
+}
+
+func (a *outlookAuth) Start(_ *smtp.ServerInfo) (string, []byte, error) {
+	return "LOGIN", []byte{}, nil
+}
+
+func (a *outlookAuth) Next(fromServer []byte, more bool) ([]byte, error) {
+	if more {
+		switch string(fromServer) {
+		case "Username:":
+			return []byte(a.username), nil
+		case "Password:":
+			return []byte(a.password), nil
+		default:
+			return nil, errors.New("unknown fromServer")
+		}
+	}
+	return nil, nil
+}

+ 3 - 0
common/email.go

@@ -62,6 +62,9 @@ func SendEmail(subject string, receiver string, content string) error {
 		if err != nil {
 			return err
 		}
+	} else if strings.HasSuffix(SMTPAccount, "outlook.com") {
+		auth = LoginAuth(SMTPAccount, SMTPToken)
+		err = smtp.SendMail(addr, auth, SMTPAccount, to, mail)
 	} else {
 		err = smtp.SendMail(addr, auth, SMTPAccount, to, mail)
 	}