Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Forums
  - IRC
  - Wiki
  - GitHub
  - Issues
- Resources
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
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
Version:
3.0.13 - Version 3.0 of the original PHP implementation: http://www.dominicsayers.com/isemail
Standards:

- RFC 5321
- RFC 5322

References:

- http://www.dominicsayers.com/isemail
- http://tools.ietf.org/html/rfc5321
- http://tools.ietf.org/html/rfc5322

Source: std/net/isemail.d

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.
  As of Version 3.0, we are now distinguishing clearly 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. The RFC 5321 Mailbox specification is more restrictive (comments, white space and obsolete forms are not allowed).

  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;
  This struct represents the status of an email address
  const @property bool valid();
    Indicates if the email address is valid or not.
  const @property string localPart();
    The local part of the email address, that is, the part before the @ sign.
  const @property string domainPart();
    The domain part of the email address, that is, the part after the @ sign.
  const @property EmailStatusCode statusCode();
    The email status code
  const @property string status();
    Returns a describing string of the status code
  const string toString();
    Returns a textual representation of the email status
string statusCodeDescription(EmailStatusCode statusCode);
  Returns a describing string of 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

Dominic Sayers, Jacob Carlborg 2008-. Test schema documentation: Copyright © 2011, Daniel Marschall | Page generated by Ddoc on Wed Nov 30 12:05:14 2016