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 }