73 lines
2.8 KiB
Go
73 lines
2.8 KiB
Go
|
package mailgun
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// The EmailVerificationParts structure breaks out the basic elements of an email address.
|
||
|
// LocalPart includes everything up to the '@' in an e-mail address.
|
||
|
// Domain includes everything after the '@'.
|
||
|
// DisplayName is no longer used, and will appear as "".
|
||
|
type EmailVerificationParts struct {
|
||
|
LocalPart string `json:"local_part"`
|
||
|
Domain string `json:"domain"`
|
||
|
DisplayName string `json:"display_name"`
|
||
|
}
|
||
|
|
||
|
// EmailVerification records basic facts about a validated e-mail address.
|
||
|
// See the ValidateEmail method and example for more details.
|
||
|
//
|
||
|
// IsValid indicates whether an email address conforms to IETF RFC standards.
|
||
|
// Parts records the different subfields of an email address.
|
||
|
// Address echoes the address provided.
|
||
|
// DidYouMean provides a simple recommendation in case the address is invalid or
|
||
|
// Mailgun thinks you might have a typo.
|
||
|
// DidYouMean may be empty (""), in which case Mailgun has no recommendation to give.
|
||
|
// The existence of DidYouMean does NOT imply the email provided has anything wrong with it.
|
||
|
type EmailVerification struct {
|
||
|
IsValid bool `json:"is_valid"`
|
||
|
Parts EmailVerificationParts `json:"parts"`
|
||
|
Address string `json:"address"`
|
||
|
DidYouMean string `json:"did_you_mean"`
|
||
|
}
|
||
|
|
||
|
type addressParseResult struct {
|
||
|
Parsed []string `json:"parsed"`
|
||
|
Unparseable []string `json:"unparseable"`
|
||
|
}
|
||
|
|
||
|
// ValidateEmail performs various checks on the email address provided to ensure it's correctly formatted.
|
||
|
// It may also be used to break an email address into its sub-components. (See example.)
|
||
|
// NOTE: Use of this function requires a proper public API key. The private API key will not work.
|
||
|
func (m *MailgunImpl) ValidateEmail(email string) (EmailVerification, error) {
|
||
|
r := newHTTPRequest(generatePublicApiUrl(m, addressValidateEndpoint))
|
||
|
r.setClient(m.Client())
|
||
|
r.addParameter("address", email)
|
||
|
r.setBasicAuth(basicAuthUser, m.PublicApiKey())
|
||
|
|
||
|
var response EmailVerification
|
||
|
err := getResponseFromJSON(r, &response)
|
||
|
if err != nil {
|
||
|
return EmailVerification{}, err
|
||
|
}
|
||
|
|
||
|
return response, nil
|
||
|
}
|
||
|
|
||
|
// ParseAddresses takes a list of addresses and sorts them into valid and invalid address categories.
|
||
|
// NOTE: Use of this function requires a proper public API key. The private API key will not work.
|
||
|
func (m *MailgunImpl) ParseAddresses(addresses ...string) ([]string, []string, error) {
|
||
|
r := newHTTPRequest(generatePublicApiUrl(m, addressParseEndpoint))
|
||
|
r.setClient(m.Client())
|
||
|
r.addParameter("addresses", strings.Join(addresses, ","))
|
||
|
r.setBasicAuth(basicAuthUser, m.PublicApiKey())
|
||
|
|
||
|
var response addressParseResult
|
||
|
err := getResponseFromJSON(r, &response)
|
||
|
if err != nil {
|
||
|
return nil, nil, err
|
||
|
}
|
||
|
|
||
|
return response.Parsed, response.Unparseable, nil
|
||
|
}
|