github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/validator_smtp.go (about)

     1  package ev
     2  
     3  import (
     4  	"github.com/go-email-validator/go-email-validator/pkg/ev/evsmtp"
     5  )
     6  
     7  // SMTPValidatorName is name of smtp validator
     8  const SMTPValidatorName ValidatorName = "SMTPValidator"
     9  
    10  // NewSMTPValidator instantiates SMTPValidatorName
    11  func NewSMTPValidator(Checker evsmtp.Checker) Validator {
    12  	return smtpValidator{Checker}
    13  }
    14  
    15  type smtpValidator struct {
    16  	checker evsmtp.Checker
    17  }
    18  
    19  func (s smtpValidator) GetDeps() []ValidatorName {
    20  	return []ValidatorName{SyntaxValidatorName, MXValidatorName}
    21  }
    22  
    23  func (s smtpValidator) Validate(input Input, results ...ValidationResult) ValidationResult {
    24  	syntaxResult := results[0].(SyntaxValidatorResult)
    25  	mxResult := results[1].(MXValidationResult)
    26  	var errs []error
    27  
    28  	if syntaxResult.IsValid() && mxResult.IsValid() {
    29  		var opts evsmtp.Options
    30  		if optsInterface := input.Option(SMTPValidatorName); optsInterface != nil {
    31  			opts = optsInterface.(evsmtp.Options)
    32  		}
    33  
    34  		errs = s.checker.Validate(
    35  			mxResult.MX(),
    36  			evsmtp.NewInput(input.Email(), opts),
    37  		)
    38  	} else {
    39  		errs = append(errs, NewDepsError())
    40  	}
    41  
    42  	return NewResult(len(errs) == 0, errs, nil, SMTPValidatorName)
    43  }