Merge pull request #1517 from haoyixin/master
Added supported of 'AUTH LOGIN'
This commit is contained in:
commit
9b01a3501b
1 changed files with 31 additions and 1 deletions
|
@ -12,11 +12,38 @@ import (
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"errors"
|
||||||
"github.com/gogits/gogs/modules/log"
|
"github.com/gogits/gogs/modules/log"
|
||||||
"github.com/gogits/gogs/modules/setting"
|
"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 {
|
type Message struct {
|
||||||
To []string
|
To []string
|
||||||
From string
|
From string
|
||||||
|
@ -135,6 +162,9 @@ func sendMail(settings *setting.Mailer, recipients []string, msgContent []byte)
|
||||||
auth = smtp.CRAMMD5Auth(settings.User, settings.Passwd)
|
auth = smtp.CRAMMD5Auth(settings.User, settings.Passwd)
|
||||||
} else if strings.Contains(options, "PLAIN") {
|
} else if strings.Contains(options, "PLAIN") {
|
||||||
auth = smtp.PlainAuth("", settings.User, settings.Passwd, host)
|
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 {
|
if auth != nil {
|
||||||
|
|
Reference in a new issue