|
@@ -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 {
|