From 76bdbcc969acd0e91cd3e10f5fdbfae3273df45b Mon Sep 17 00:00:00 2001
From: Unknwon <u@gogs.io>
Date: Fri, 11 Dec 2015 18:57:45 -0500
Subject: [PATCH] #2152 fix SMTP authentication makes invalid assumption on
 protocol

---
 models/login.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/models/login.go b/models/login.go
index 1f248b4860..e36171a342 100644
--- a/models/login.go
+++ b/models/login.go
@@ -10,6 +10,7 @@ import (
 	"errors"
 	"fmt"
 	"net/smtp"
+	"net/textproto"
 	"strings"
 	"time"
 
@@ -371,7 +372,11 @@ func LoginUserSMTPSource(u *User, name, passwd string, sourceID int64, cfg *SMTP
 	}
 
 	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, err