diff --git a/internal/run/run.go b/internal/run/run.go index 38027b5..2ea7dab 100644 --- a/internal/run/run.go +++ b/internal/run/run.go @@ -18,7 +18,7 @@ type VerifyEmailResponse struct { IsRisky bool Risk VerifyEmailRisk Syntax mailvalidate.SyntaxValidation - AlternateEmail AlternateEmail + AlternateEmail mailvalidate.AlternateEmail RetryValidation bool Smtp mailvalidate.SmtpResponse MailServerHealth mailvalidate.MailServerHealth @@ -32,10 +32,6 @@ type VerifyEmailRisk struct { IsPrimaryDomain bool } -type AlternateEmail struct { - Email string -} - func BuildRequest(email string) mailvalidate.EmailValidationRequest { firstname, lastname := mailvalidate.GenerateNames() fromDomain, exists := os.LookupEnv("MAIL_SERVER_DOMAIN") diff --git a/mailvalidate/validation.go b/mailvalidate/validation.go index 30192c3..84d12b0 100644 --- a/mailvalidate/validation.go +++ b/mailvalidate/validation.go @@ -22,6 +22,13 @@ type EmailValidationRequest struct { FromEmail string CatchAllTestUser string Dns *dns.DNS + // applicable only for email validation. Pass results from domain validation + DomainValidationParams *DomainValidationParams +} + +type DomainValidationParams struct { + IsPrimaryDomain bool + PrimaryDomain string } type SyntaxValidation struct { @@ -31,6 +38,10 @@ type SyntaxValidation struct { CleanEmail string } +type AlternateEmail struct { + Email string +} + type DomainValidation struct { Provider string SecureGatewayProvider string @@ -54,6 +65,7 @@ type EmailValidation struct { RetryValidation bool SmtpResponse SmtpResponse MailServerHealth MailServerHealth + AlternateEmail AlternateEmail Error string } @@ -147,6 +159,7 @@ func ValidateEmail(validationRequest EmailValidationRequest) EmailValidation { results.Error = fmt.Sprintf("Invalid request: %v", err) return results } + emailSyntaxResult := ValidateEmailSyntax(validationRequest.Email) if !emailSyntaxResult.IsValid { results.Error = "Invalid email address" @@ -198,6 +211,12 @@ func ValidateEmail(validationRequest EmailValidationRequest) EmailValidation { handleSmtpResponses(&validationRequest, &results) + if validationRequest.DomainValidationParams != nil { + if !validationRequest.DomainValidationParams.IsPrimaryDomain && validationRequest.DomainValidationParams.PrimaryDomain != "" { + results.AlternateEmail.Email = fmt.Sprintf("%s@%s", emailSyntaxResult.User, validationRequest.DomainValidationParams.PrimaryDomain) + } + } + return results }