Sfoglia il codice sorgente

Merge pull request #1517 from haoyixin/master

Added supported of 'AUTH LOGIN'
无闻 9 anni fa
parent
commit
9b01a3501b
1 ha cambiato i file con 31 aggiunte e 1 eliminazioni
  1. 31 1
      modules/mailer/mailer.go

+ 31 - 1
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 {