From d720c92d995131c19a5cb2bb55f54b804fda4cc4 Mon Sep 17 00:00:00 2001 From: Yixin Hao Date: Thu, 20 Aug 2015 13:56:25 +0800 Subject: [PATCH] Added supported of 'AUTH LOGIN' i've been missing a 'r' in previous, lol~ --- modules/mailer/mailer.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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 {