Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

std.net.isemail

Validates an email address according to RFCs 5321, 5322 and others.
Authors:
Dominic Sayers <dominic@sayers.cc>, Jacob Carlborg
License:
Boost Software License 1.0 Dominic Sayers graciously granted permission to use the Boost license via email on Feb 22, 2011.
Version:
3.0.13 - Version 3.0 of the original PHP implementation: http://www.dominicsayers.com/isemail
Standards:
  • RFC 5321
  • RFC 5322
EmailStatus isEmail(Char)(const(Char)[] email, CheckDns checkDNS = No.checkDns, EmailStatusCode errorLevel = EmailStatusCode.none)
if (isSomeChar!Char);
Check that an email address conforms to RFCs 5321, 5322 and others.
Distinguishes between a Mailbox as defined by RFC 5321 and an addr-spec as defined by RFC 5322. Depending on the context, either can be regarded as a valid email address.

Note The DNS check is currently not implemented.

Parameters:
const(Char)[] email The email address to check
CheckDns checkDNS If Yes.checkDns then a DNS check for MX records will be made
EmailStatusCode errorLevel Determines the boundary between valid and invalid addresses. Status codes above this number will be returned as-is, status codes below will be returned as EmailStatusCode.valid. Thus the calling program can simply look for EmailStatusCode.valid if it is only interested in whether an address is valid or not. The errorLevel will determine how "picky" isEmail() is about the address.
If omitted or passed as EmailStatusCode.none then isEmail() will not perform any finer grained error checking and an address is either considered valid or not. Email status code will either be EmailStatusCode.valid or EmailStatusCode.error.
Returns:
An EmailStatus, indicating the status of the email address.
alias CheckDns = std.typecons.Flag!"checkDns".Flag;
Flag for indicating if the isEmail function should perform a DNS check or not.
If set to CheckDns.no, isEmail does not perform DNS checking.
Otherwise if set to CheckDns.yes, isEmail performs DNS checking.
struct EmailStatus;
Represents the status of an email address
const pure nothrow @nogc @property scope @safe bool valid();
Returns:
If the email address is valid or not.
const pure nothrow @nogc @property scope @safe string localPart() return;
Returns:
The local part of the email address, that is, the part before the @ sign.
const pure nothrow @nogc @property scope @safe string domainPart() return;
Returns:
The domain part of the email address, that is, the part after the @ sign.
const pure nothrow @nogc @property scope @safe EmailStatusCode statusCode();
Returns:
The email status code
const pure nothrow @nogc @property scope @safe string status();
Returns:
A describing string of the status code
const pure scope @safe string toString();
Returns:
A textual representation of the email status
pure nothrow @nogc @safe string statusCodeDescription(EmailStatusCode statusCode);
Parameters:
EmailStatusCode statusCode The EmailStatusCode to read
Returns:
A detailed string describing the given status code
enum EmailStatusCode: int;
An email status code, indicating if an email address is valid or not. If it is invalid it also indicates why.
validCategory
Address is valid
dnsWarning
Address is valid but a DNS check was not successful
rfc5321
Address is valid for SMTP but has unusual elements
cFoldingWhitespace
Address is valid within the message but cannot be used unmodified for the envelope
deprecated_
Address contains deprecated elements but may still be valid in restricted contexts
rfc5322
The address is only valid according to the broad definition of RFC 5322. It is otherwise invalid
any
All finer grained error checking is turned on. Address containing errors or warnings is considered invalid. A specific email status code will be returned indicating the error/warning of the address.
none
Address is either considered valid or not, no finer grained error checking is performed. Returned email status code will be either Error or Valid.
warning
Address containing warnings is considered valid, that is, any status code below 16 is considered valid.
error
Address is invalid for any purpose
valid
Address is valid
dnsWarningNoMXRecord
Could not find an MX record for this domain but an A-record does exist
dnsWarningNoRecord
Could not find an MX record or an A-record for this domain
rfc5321TopLevelDomain
Address is valid but at a Top Level Domain
rfc5321TopLevelDomainNumeric
Address is valid but the Top Level Domain begins with a number
rfc5321QuotedString
Address is valid but contains a quoted string
rfc5321AddressLiteral
Address is valid but at a literal address not a domain
rfc5321IpV6Deprecated
Address is valid but contains a :: that only elides one zero group
comment
Address contains comments
foldingWhitespace
Address contains Folding White Space
deprecatedLocalPart
The local part is in a deprecated form
deprecatedFoldingWhitespace
Address contains an obsolete form of Folding White Space
deprecatedQuotedText
A quoted string contains a deprecated character
deprecatedQuotedPair
A quoted pair contains a deprecated character
deprecatedComment
Address contains a comment in a position that is deprecated
deprecatedCommentText
A comment contains a deprecated character
deprecatedCommentFoldingWhitespaceNearAt
Address contains a comment or Folding White Space around the @ sign
rfc5322Domain
Address is RFC 5322 compliant but contains domain characters that are not allowed by DNS
rfc5322TooLong
Address is too long
rfc5322LocalTooLong
The local part of the address is too long
rfc5322DomainTooLong
The domain part is too long
rfc5322LabelTooLong
The domain part contains an element that is too long
rfc5322DomainLiteral
The domain literal is not a valid RFC 5321 address literal
rfc5322DomainLiteralObsoleteText
The domain literal is not a valid RFC 5321 address literal and it contains obsolete characters
rfc5322IpV6GroupCount
The IPv6 literal address contains the wrong number of groups
rfc5322IpV6TooManyDoubleColons
The IPv6 literal address contains too many :: sequences
rfc5322IpV6BadChar
The IPv6 address contains an illegal group of characters
rfc5322IpV6MaxGroups
The IPv6 address has too many groups
rfc5322IpV6ColonStart
IPv6 address starts with a single colon
rfc5322IpV6ColonEnd
IPv6 address ends with a single colon
errorExpectingDomainText
A domain literal contains a character that is not allowed
errorNoLocalPart
Address has no local part
errorNoDomain
Address has no domain part
errorConsecutiveDots
The address may not contain consecutive dots
errorTextAfterCommentFoldingWhitespace
Address contains text after a comment or Folding White Space
errorTextAfterQuotedString
Address contains text after a quoted string
errorTextAfterDomainLiteral
Extra characters were found after the end of the domain literal
errorExpectingQuotedPair
The address contains a character that is not allowed in a quoted pair
errorExpectingText
Address contains a character that is not allowed
errorExpectingQuotedText
A quoted string contains a character that is not allowed
errorExpectingCommentText
A comment contains a character that is not allowed
errorBackslashEnd
The address cannot end with a backslash
errorDotStart
Neither part of the address may begin with a dot
errorDotEnd
Neither part of the address may end with a dot
errorDomainHyphenStart
A domain or subdomain cannot begin with a hyphen
errorDomainHyphenEnd
A domain or subdomain cannot end with a hyphen
errorUnclosedQuotedString
Unclosed quoted string
errorUnclosedComment
Unclosed comment
errorUnclosedDomainLiteral
Domain literal is missing its closing bracket
errorFoldingWhitespaceCrflX2
Folding White Space contains consecutive CRLF sequences
errorFoldingWhitespaceCrLfEnd
Folding White Space ends with a CRLF sequence
errorCrNoLf
Address contains a carriage return that is not followed by a line feed