W3cubDocs

/D

std.net.isemail

Validates an email address according to RFCs 5321, 5322 and others.

Authors:
Dominic Sayers <[email protected]>, 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
Source
std/net/isemail.d
EmailStatus isEmail(Char)(const(Char)[] email, CheckDns checkDNS = No.checkDns, EmailStatusCode errorLevel = EmailStatusCode.none)
Constraints: 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 @safe bool valid();
Returns:
If the email address is valid or not.
const pure nothrow @nogc @property @safe string localPart();
Returns:
The local part of the email address, that is, the part before the @ sign.
const pure nothrow @nogc @property @safe string domainPart();
Returns:
The domain part of the email address, that is, the part after the @ sign.
const pure nothrow @nogc @property @safe EmailStatusCode statusCode();
Returns:
The email status code
const pure nothrow @nogc @property @safe string status();
Returns:
A describing string of the status code
const pure @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

© 1999–2018 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_net_isemail.html