|
|
@ -10,6 +10,7 @@ import ( |
|
|
|
"errors" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"net/smtp" |
|
|
|
"net/smtp" |
|
|
|
|
|
|
|
"net/textproto" |
|
|
|
"strings" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
@ -371,7 +372,11 @@ func LoginUserSMTPSource(u *User, name, passwd string, sourceID int64, cfg *SMTP |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if err := SMTPAuth(auth, cfg); err != nil { |
|
|
|
if err := SMTPAuth(auth, cfg); err != nil { |
|
|
|
if strings.Contains(err.Error(), "Username and Password not accepted") { |
|
|
|
// Check standard error format first,
|
|
|
|
|
|
|
|
// then fallback to worse case.
|
|
|
|
|
|
|
|
tperr, ok := err.(*textproto.Error) |
|
|
|
|
|
|
|
if (ok && tperr.Code == 535) || |
|
|
|
|
|
|
|
strings.Contains(err.Error(), "Username and Password not accepted") { |
|
|
|
return nil, ErrUserNotExist{0, name} |
|
|
|
return nil, ErrUserNotExist{0, name} |
|
|
|
} |
|
|
|
} |
|
|
|
return nil, err |
|
|
|
return nil, err |
|
|
|