diff --git a/modules/mailer/mailer.go b/modules/mailer/mailer.go
index 9dafa93f91..4fbacf2912 100644
--- a/modules/mailer/mailer.go
+++ b/modules/mailer/mailer.go
@@ -12,11 +12,38 @@ import (
 	"net/smtp"
 	"os"
 	"strings"
-
+	"errors"
 	"github.com/gogits/gogs/modules/log"
 	"github.com/gogits/gogs/modules/setting"
 )
 
+type loginAuth struct {
+  username, password string
+}
+
+//SMTP AUTH LOGIN Auth Handler
+func LoginAuth(username, password string) smtp.Auth {
+	return &loginAuth{username, password}
+}
+
+func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) {
+	return "LOGIN", []byte{}, nil
+}
+
+func (a *loginAuth) 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("Unkown fromServer")
+		}
+	}
+	return nil, nil
+}
+
 type Message struct {
 	To      []string
 	From    string
@@ -135,6 +162,9 @@ func sendMail(settings *setting.Mailer, recipients []string, msgContent []byte)
 			auth = smtp.CRAMMD5Auth(settings.User, settings.Passwd)
 		} else if strings.Contains(options, "PLAIN") {
 			auth = smtp.PlainAuth("", settings.User, settings.Passwd, host)
+		//Patch for AUTH LOGIN
+		} else if strings.Contains(options, "LOGIN") {
+			auth = LoginAuth(settings.User, settings.Passwd)
 		}
 
 		if auth != nil {