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