| 
					
				 | 
			
			
				@@ -67,11 +67,12 @@ func (cfg *LDAPConfig) ToDB() ([]byte, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type SMTPConfig struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Auth       string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Host       string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Port       int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	TLS        bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	SkipVerify bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Auth           string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Host           string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Port           int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	AllowedDomains string `xorm:"TEXT"` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	TLS            bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SkipVerify     bool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (cfg *SMTPConfig) FromDB(bs []byte) error { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -383,6 +384,16 @@ func SMTPAuth(a smtp.Auth, cfg *SMTPConfig) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // Create a local user if success 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // Return the same LoginUserPlain semantic 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func LoginUserSMTPSource(u *User, name, passwd string, sourceId int64, cfg *SMTPConfig, autoRegister bool) (*User, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Verify allowed domains. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if len(cfg.AllowedDomains) > 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		idx := strings.Index(name, "@") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if idx == -1 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return nil, ErrUserNotExist{0, name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else if !com.IsSliceContainsStr(strings.Split(cfg.AllowedDomains, ","), name[idx+1:]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return nil, ErrUserNotExist{0, name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var auth smtp.Auth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if cfg.Auth == SMTP_PLAIN { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		auth = smtp.PlainAuth("", name, passwd, cfg.Host) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -394,7 +405,8 @@ func LoginUserSMTPSource(u *User, name, passwd string, sourceId int64, cfg *SMTP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err := SMTPAuth(auth, cfg); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if strings.Contains(err.Error(), "Username and Password not accepted") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return nil, ErrUserNotExist{u.Id, u.Name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fmt.Println(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return nil, ErrUserNotExist{0, name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 |