Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Forums
  - IRC
  - Community Discord
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Security Team
  - Donate
  - Sponsors
- Resources
  - Tour
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - run.dlang.io
  - 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 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

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.
  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

Copyright © 1999-2023 by the D Language Foundation | Page generated by Ddoc on Mon May 1 15:50:59 2023