is_email.php
To validate an email address according to RFCs 5321, 5322 and others
Copyright © 2008-2011, Dominic Sayers Test schema documentation Copyright © 2011, Daniel Marschall All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither the name of Dominic Sayers nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Tags
Table of Contents
Constants
- ISEMAIL_CFWS = 31
- ISEMAIL_CFWS_COMMENT = 17
- ISEMAIL_CFWS_FWS = 18
- ISEMAIL_COMPONENT_DOMAIN = 1
- ISEMAIL_COMPONENT_LITERAL = 2
- ISEMAIL_COMPONENT_LOCALPART = 0
- ISEMAIL_CONTEXT_COMMENT = 3
- ISEMAIL_CONTEXT_FWS = 4
- ISEMAIL_CONTEXT_QUOTEDPAIR = 6
- ISEMAIL_CONTEXT_QUOTEDSTRING = 5
- ISEMAIL_DEPREC = 63
- ISEMAIL_DEPREC_CFWS_NEAR_AT = 49
- ISEMAIL_DEPREC_COMMENT = 37
- ISEMAIL_DEPREC_CTEXT = 38
- ISEMAIL_DEPREC_FWS = 34
- ISEMAIL_DEPREC_LOCALPART = 33
- ISEMAIL_DEPREC_QP = 36
- ISEMAIL_DEPREC_QTEXT = 35
- ISEMAIL_DNSWARN = 7
- ISEMAIL_DNSWARN_NO_MX_RECORD = 5
- ISEMAIL_DNSWARN_NO_RECORD = 6
- ISEMAIL_ERR = 255
- ISEMAIL_ERR_ATEXT_AFTER_CFWS = 133
- ISEMAIL_ERR_ATEXT_AFTER_DOMLIT = 135
- ISEMAIL_ERR_ATEXT_AFTER_QS = 134
- ISEMAIL_ERR_BACKSLASHEND = 140
- ISEMAIL_ERR_CONSECUTIVEDOTS = 132
- ISEMAIL_ERR_CR_NO_LF = 150
- ISEMAIL_ERR_DOMAINHYPHENEND = 144
- ISEMAIL_ERR_DOMAINHYPHENSTART = 143
- ISEMAIL_ERR_DOT_END = 142
- ISEMAIL_ERR_DOT_START = 141
- ISEMAIL_ERR_EXPECTING_ATEXT = 137
- ISEMAIL_ERR_EXPECTING_CTEXT = 139
- ISEMAIL_ERR_EXPECTING_DTEXT = 129
- ISEMAIL_ERR_EXPECTING_QPAIR = 136
- ISEMAIL_ERR_EXPECTING_QTEXT = 138
- ISEMAIL_ERR_FWS_CRLF_END = 149
- ISEMAIL_ERR_FWS_CRLF_X2 = 148
- ISEMAIL_ERR_NODOMAIN = 131
- ISEMAIL_ERR_NOLOCALPART = 130
- ISEMAIL_ERR_UNCLOSEDCOMMENT = 146
- ISEMAIL_ERR_UNCLOSEDDOMLIT = 147
- ISEMAIL_ERR_UNCLOSEDQUOTEDSTR = 145
- ISEMAIL_RFC5321 = 15
- ISEMAIL_RFC5321_ADDRESSLITERAL = 12
- ISEMAIL_RFC5321_IPV6DEPRECATED = 13
- ISEMAIL_RFC5321_QUOTEDSTRING = 11
- ISEMAIL_RFC5321_TLD = 9
- ISEMAIL_RFC5321_TLDNUMERIC = 10
- ISEMAIL_RFC5322 = 127
- ISEMAIL_RFC5322_DOMAIN = 65
- ISEMAIL_RFC5322_DOMAIN_TOOLONG = 68
- ISEMAIL_RFC5322_DOMAINLITERAL = 70
- ISEMAIL_RFC5322_DOMLIT_OBSDTEXT = 71
- ISEMAIL_RFC5322_IPV6_2X2XCOLON = 73
- ISEMAIL_RFC5322_IPV6_BADCHAR = 74
- ISEMAIL_RFC5322_IPV6_COLONEND = 77
- ISEMAIL_RFC5322_IPV6_COLONSTRT = 76
- ISEMAIL_RFC5322_IPV6_GRPCOUNT = 72
- ISEMAIL_RFC5322_IPV6_MAXGRPS = 75
- ISEMAIL_RFC5322_LABEL_TOOLONG = 69
- ISEMAIL_RFC5322_LOCAL_TOOLONG = 67
- ISEMAIL_RFC5322_TOOLONG = 66
- ISEMAIL_STRING_AT = '@'
- ISEMAIL_STRING_BACKSLASH = '\\'
- ISEMAIL_STRING_CLOSEPARENTHESIS = ')'
- ISEMAIL_STRING_CLOSESQBRACKET = ']'
- ISEMAIL_STRING_COLON = ':'
- ISEMAIL_STRING_CR = "\r"
- ISEMAIL_STRING_DOT = '.'
- ISEMAIL_STRING_DOUBLECOLON = '::'
- ISEMAIL_STRING_DQUOTE = '"'
- ISEMAIL_STRING_HTAB = "\t"
- ISEMAIL_STRING_HYPHEN = '-'
- ISEMAIL_STRING_IPV6TAG = 'IPv6:'
- ISEMAIL_STRING_LF = "\n"
- ISEMAIL_STRING_OPENPARENTHESIS = '('
- ISEMAIL_STRING_OPENSQBRACKET = '['
- ISEMAIL_STRING_SP = ' '
- ISEMAIL_STRING_SPECIALS = '()<>[]:;@\,."'
- ISEMAIL_THRESHOLD = 16
- ISEMAIL_VALID = 0
- ISEMAIL_VALID_CATEGORY = 1
Functions
- is_email() : bool|int
- Check that an email address conforms to RFCs 5321, 5322 and others
Constants
ISEMAIL_CFWS
public
mixed
ISEMAIL_CFWS
= 31
ISEMAIL_CFWS_COMMENT
public
mixed
ISEMAIL_CFWS_COMMENT
= 17
ISEMAIL_CFWS_FWS
public
mixed
ISEMAIL_CFWS_FWS
= 18
ISEMAIL_COMPONENT_DOMAIN
public
mixed
ISEMAIL_COMPONENT_DOMAIN
= 1
ISEMAIL_COMPONENT_LITERAL
public
mixed
ISEMAIL_COMPONENT_LITERAL
= 2
ISEMAIL_COMPONENT_LOCALPART
public
mixed
ISEMAIL_COMPONENT_LOCALPART
= 0
ISEMAIL_CONTEXT_COMMENT
public
mixed
ISEMAIL_CONTEXT_COMMENT
= 3
ISEMAIL_CONTEXT_FWS
public
mixed
ISEMAIL_CONTEXT_FWS
= 4
ISEMAIL_CONTEXT_QUOTEDPAIR
public
mixed
ISEMAIL_CONTEXT_QUOTEDPAIR
= 6
ISEMAIL_CONTEXT_QUOTEDSTRING
public
mixed
ISEMAIL_CONTEXT_QUOTEDSTRING
= 5
ISEMAIL_DEPREC
public
mixed
ISEMAIL_DEPREC
= 63
ISEMAIL_DEPREC_CFWS_NEAR_AT
public
mixed
ISEMAIL_DEPREC_CFWS_NEAR_AT
= 49
ISEMAIL_DEPREC_COMMENT
public
mixed
ISEMAIL_DEPREC_COMMENT
= 37
ISEMAIL_DEPREC_CTEXT
public
mixed
ISEMAIL_DEPREC_CTEXT
= 38
ISEMAIL_DEPREC_FWS
public
mixed
ISEMAIL_DEPREC_FWS
= 34
ISEMAIL_DEPREC_LOCALPART
public
mixed
ISEMAIL_DEPREC_LOCALPART
= 33
ISEMAIL_DEPREC_QP
public
mixed
ISEMAIL_DEPREC_QP
= 36
ISEMAIL_DEPREC_QTEXT
public
mixed
ISEMAIL_DEPREC_QTEXT
= 35
ISEMAIL_DNSWARN
public
mixed
ISEMAIL_DNSWARN
= 7
ISEMAIL_DNSWARN_NO_MX_RECORD
public
mixed
ISEMAIL_DNSWARN_NO_MX_RECORD
= 5
ISEMAIL_DNSWARN_NO_RECORD
public
mixed
ISEMAIL_DNSWARN_NO_RECORD
= 6
ISEMAIL_ERR
public
mixed
ISEMAIL_ERR
= 255
ISEMAIL_ERR_ATEXT_AFTER_CFWS
public
mixed
ISEMAIL_ERR_ATEXT_AFTER_CFWS
= 133
ISEMAIL_ERR_ATEXT_AFTER_DOMLIT
public
mixed
ISEMAIL_ERR_ATEXT_AFTER_DOMLIT
= 135
ISEMAIL_ERR_ATEXT_AFTER_QS
public
mixed
ISEMAIL_ERR_ATEXT_AFTER_QS
= 134
ISEMAIL_ERR_BACKSLASHEND
public
mixed
ISEMAIL_ERR_BACKSLASHEND
= 140
ISEMAIL_ERR_CONSECUTIVEDOTS
public
mixed
ISEMAIL_ERR_CONSECUTIVEDOTS
= 132
ISEMAIL_ERR_CR_NO_LF
public
mixed
ISEMAIL_ERR_CR_NO_LF
= 150
ISEMAIL_ERR_DOMAINHYPHENEND
public
mixed
ISEMAIL_ERR_DOMAINHYPHENEND
= 144
ISEMAIL_ERR_DOMAINHYPHENSTART
public
mixed
ISEMAIL_ERR_DOMAINHYPHENSTART
= 143
ISEMAIL_ERR_DOT_END
public
mixed
ISEMAIL_ERR_DOT_END
= 142
ISEMAIL_ERR_DOT_START
public
mixed
ISEMAIL_ERR_DOT_START
= 141
ISEMAIL_ERR_EXPECTING_ATEXT
public
mixed
ISEMAIL_ERR_EXPECTING_ATEXT
= 137
ISEMAIL_ERR_EXPECTING_CTEXT
public
mixed
ISEMAIL_ERR_EXPECTING_CTEXT
= 139
ISEMAIL_ERR_EXPECTING_DTEXT
public
mixed
ISEMAIL_ERR_EXPECTING_DTEXT
= 129
ISEMAIL_ERR_EXPECTING_QPAIR
public
mixed
ISEMAIL_ERR_EXPECTING_QPAIR
= 136
ISEMAIL_ERR_EXPECTING_QTEXT
public
mixed
ISEMAIL_ERR_EXPECTING_QTEXT
= 138
ISEMAIL_ERR_FWS_CRLF_END
public
mixed
ISEMAIL_ERR_FWS_CRLF_END
= 149
ISEMAIL_ERR_FWS_CRLF_X2
public
mixed
ISEMAIL_ERR_FWS_CRLF_X2
= 148
ISEMAIL_ERR_NODOMAIN
public
mixed
ISEMAIL_ERR_NODOMAIN
= 131
ISEMAIL_ERR_NOLOCALPART
public
mixed
ISEMAIL_ERR_NOLOCALPART
= 130
ISEMAIL_ERR_UNCLOSEDCOMMENT
public
mixed
ISEMAIL_ERR_UNCLOSEDCOMMENT
= 146
ISEMAIL_ERR_UNCLOSEDDOMLIT
public
mixed
ISEMAIL_ERR_UNCLOSEDDOMLIT
= 147
ISEMAIL_ERR_UNCLOSEDQUOTEDSTR
public
mixed
ISEMAIL_ERR_UNCLOSEDQUOTEDSTR
= 145
ISEMAIL_RFC5321
public
mixed
ISEMAIL_RFC5321
= 15
ISEMAIL_RFC5321_ADDRESSLITERAL
public
mixed
ISEMAIL_RFC5321_ADDRESSLITERAL
= 12
ISEMAIL_RFC5321_IPV6DEPRECATED
public
mixed
ISEMAIL_RFC5321_IPV6DEPRECATED
= 13
ISEMAIL_RFC5321_QUOTEDSTRING
public
mixed
ISEMAIL_RFC5321_QUOTEDSTRING
= 11
ISEMAIL_RFC5321_TLD
public
mixed
ISEMAIL_RFC5321_TLD
= 9
ISEMAIL_RFC5321_TLDNUMERIC
public
mixed
ISEMAIL_RFC5321_TLDNUMERIC
= 10
ISEMAIL_RFC5322
public
mixed
ISEMAIL_RFC5322
= 127
ISEMAIL_RFC5322_DOMAIN
public
mixed
ISEMAIL_RFC5322_DOMAIN
= 65
ISEMAIL_RFC5322_DOMAIN_TOOLONG
public
mixed
ISEMAIL_RFC5322_DOMAIN_TOOLONG
= 68
ISEMAIL_RFC5322_DOMAINLITERAL
public
mixed
ISEMAIL_RFC5322_DOMAINLITERAL
= 70
ISEMAIL_RFC5322_DOMLIT_OBSDTEXT
public
mixed
ISEMAIL_RFC5322_DOMLIT_OBSDTEXT
= 71
ISEMAIL_RFC5322_IPV6_2X2XCOLON
public
mixed
ISEMAIL_RFC5322_IPV6_2X2XCOLON
= 73
ISEMAIL_RFC5322_IPV6_BADCHAR
public
mixed
ISEMAIL_RFC5322_IPV6_BADCHAR
= 74
ISEMAIL_RFC5322_IPV6_COLONEND
public
mixed
ISEMAIL_RFC5322_IPV6_COLONEND
= 77
ISEMAIL_RFC5322_IPV6_COLONSTRT
public
mixed
ISEMAIL_RFC5322_IPV6_COLONSTRT
= 76
ISEMAIL_RFC5322_IPV6_GRPCOUNT
public
mixed
ISEMAIL_RFC5322_IPV6_GRPCOUNT
= 72
ISEMAIL_RFC5322_IPV6_MAXGRPS
public
mixed
ISEMAIL_RFC5322_IPV6_MAXGRPS
= 75
ISEMAIL_RFC5322_LABEL_TOOLONG
public
mixed
ISEMAIL_RFC5322_LABEL_TOOLONG
= 69
ISEMAIL_RFC5322_LOCAL_TOOLONG
public
mixed
ISEMAIL_RFC5322_LOCAL_TOOLONG
= 67
ISEMAIL_RFC5322_TOOLONG
public
mixed
ISEMAIL_RFC5322_TOOLONG
= 66
ISEMAIL_STRING_AT
public
mixed
ISEMAIL_STRING_AT
= '@'
ISEMAIL_STRING_BACKSLASH
public
mixed
ISEMAIL_STRING_BACKSLASH
= '\\'
ISEMAIL_STRING_CLOSEPARENTHESIS
public
mixed
ISEMAIL_STRING_CLOSEPARENTHESIS
= ')'
ISEMAIL_STRING_CLOSESQBRACKET
public
mixed
ISEMAIL_STRING_CLOSESQBRACKET
= ']'
ISEMAIL_STRING_COLON
public
mixed
ISEMAIL_STRING_COLON
= ':'
ISEMAIL_STRING_CR
public
mixed
ISEMAIL_STRING_CR
= "\r"
ISEMAIL_STRING_DOT
public
mixed
ISEMAIL_STRING_DOT
= '.'
ISEMAIL_STRING_DOUBLECOLON
public
mixed
ISEMAIL_STRING_DOUBLECOLON
= '::'
ISEMAIL_STRING_DQUOTE
public
mixed
ISEMAIL_STRING_DQUOTE
= '"'
ISEMAIL_STRING_HTAB
public
mixed
ISEMAIL_STRING_HTAB
= "\t"
ISEMAIL_STRING_HYPHEN
public
mixed
ISEMAIL_STRING_HYPHEN
= '-'
ISEMAIL_STRING_IPV6TAG
public
mixed
ISEMAIL_STRING_IPV6TAG
= 'IPv6:'
ISEMAIL_STRING_LF
public
mixed
ISEMAIL_STRING_LF
= "\n"
ISEMAIL_STRING_OPENPARENTHESIS
public
mixed
ISEMAIL_STRING_OPENPARENTHESIS
= '('
ISEMAIL_STRING_OPENSQBRACKET
public
mixed
ISEMAIL_STRING_OPENSQBRACKET
= '['
ISEMAIL_STRING_SP
public
mixed
ISEMAIL_STRING_SP
= ' '
ISEMAIL_STRING_SPECIALS
public
mixed
ISEMAIL_STRING_SPECIALS
= '()<>[]:;@\,."'
ISEMAIL_THRESHOLD
public
mixed
ISEMAIL_THRESHOLD
= 16
ISEMAIL_VALID
public
mixed
ISEMAIL_VALID
= 0
ISEMAIL_VALID_CATEGORY
public
mixed
ISEMAIL_VALID_CATEGORY
= 1
Functions
is_email()
Check that an email address conforms to RFCs 5321, 5322 and others
is_email(string $email[, bool $checkDNS = false ][, mixed $errorlevel = false ][, array<string|int, mixed> &$parsedata = [] ]) : bool|int
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)
Parameters
- $email : string
-
The email address to check
- $checkDNS : bool = false
-
If true then a DNS check for MX records will be made
- $errorlevel : mixed = false
-
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 ISEMAIL_VALID. Thus the calling program can simply look for ISEMAIL_VALID if it is only interested in whether an address is valid or not. The errorlevel will determine how "picky" is_email() is about the address.
If omitted or passed as false then is_email() will return true or false rather than an integer error or warning.
NB Note the difference between $errorlevel = false and $errorlevel = 0
- $parsedata : array<string|int, mixed> = []
-
If passed, returns the parsed address components