]> source.dussan.org Git - gitea.git/commitdiff
Added supported of 'AUTH LOGIN'
authorYixin Hao <haoyixin@live.cn>
Thu, 20 Aug 2015 05:56:25 +0000 (13:56 +0800)
committerYixin Hao <haoyixin@live.cn>
Thu, 20 Aug 2015 05:56:25 +0000 (13:56 +0800)
i've been missing a 'r' in previous, lol~

modules/mailer/mailer.go

index 9dafa93f919d5b4057cebb2e454f26f266580cff..4fbacf291248a3cd7c1c4bec354f2954eea5be88 100644 (file)
@@ -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 {