Horde_Mail_Rfc822_Identification
extends Horde_Mail_Rfc822
in package
Class to parse identification headers (RFC 5322 [3.6.4]): Message-ID, References, and In-Reply-To.
Tags
Table of Contents
- ATEXT = '!#$%&\'*+-./0123456789=?ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~'
- Valid atext characters.
- ENCODE_FILTER = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\"(),:;<>@[\\]"
- Excluded (in ASCII decimal): 0-8, 10-31, 34, 40-41, 44, 58-60, 62, 64, 91-93, 127
- $ids : array<string|int, mixed>
- List of message IDs parsed.
- $_comments : string
- Comment cache.
- $_data : string
- The address string to parse.
- $_datalen : int
- Length of the address string.
- $_listob : Horde_Mail_Rfc822_List
- List object to return in parseAddressList().
- $_params : array<string|int, mixed>
- Configuration parameters.
- $_ptr : int
- Data pointer.
- __construct() : mixed
- Constructor.
- approximateCount() : int
- Returns an approximate count of how many addresses are in the string.
- encode() : string
- Quotes and escapes the given string if necessary using rules contained in RFC 2822 [3.2.5].
- isValidInetAddress() : mixed
- Validates whether an email is of the common internet form: <user>@<domain>. This can be sufficient for most people.
- parse() : mixed
- Parse an identification header.
- parseAddressList() : Horde_Mail_Rfc822_List
- Starts the whole process.
- trimAddress() : string
- If an email address has no personal information, get rid of any angle brackets (<>) around it.
- _curr() : string
- Return current character.
- _parseAddress() : mixed
- address = mailbox / group
- _parseAddressList() : mixed
- address-list = (address *("," address)) / obs-addr-list
- _parseAddrSpec() : mixed
- addr-spec = local-part "@" domain
- _parseAngleAddr() : mixed
- "<" [ "@" route ":" ] local-part "@" domain ">"
- _parseDomainList() : array<string|int, mixed>
- obs-domain-list = "@" domain *(*(CFWS / "," ) [CFWS] "@" domain)
- _parseGroup() : bool
- group = display-name ":" [mailbox-list / CFWS] ";" [CFWS] display-name = phrase
- _parseLocalPart() : string
- local-part = dot-atom / quoted-string / obs-local-part obs-local-part = word *("." word)
- _parseMailbox() : mixed
- mailbox = name-addr / addr-spec
- _parseNameAddr() : mixed
- name-addr = [display-name] angle-addr display-name = phrase
- _rfc822IsAtext() : bool
- Check if data is an atom.
- _rfc822ParseAtomOrDot() : mixed
- atom = [CFWS] 1*atext [CFWS] atext = ; Any character except controls, SP, and specials.
- _rfc822ParseDomain() : mixed
- domain = dot-atom / domain-literal / obs-domain domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] obs-domain = atom *("." atom)
- _rfc822ParseDomainLiteral() : mixed
- domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] dcontent = dtext / quoted-pair dtext = NO-WS-CTL / ; Non white space controls %d33-90 / ; The rest of the US-ASCII %d94-126 ; characters not including "[", ; "]", or "\"
- _rfc822ParseDotAtom() : mixed
- dot-atom = [CFWS] dot-atom-text [CFWS] dot-atom-text = 1*atext *("." 1*atext)
- _rfc822ParsePhrase() : mixed
- phrase = 1*word / obs-phrase word = atom / quoted-string obs-phrase = word *(word / "." / CFWS)
- _rfc822ParseQuotedString() : mixed
- _rfc822SkipComment() : mixed
- _rfc822SkipLwsp() : mixed
- _parseMessageId() : string
- Message IDs are defined in RFC 5322 [3.6.4]. In short, they can only contain one '@' character. However, Outlook can produce invalid Message-IDs containing multiple '@' characters, which will fail the strict RFC checks.
Constants
ATEXT
Valid atext characters.
public
mixed
ATEXT
= '!#$%&\'*+-./0123456789=?ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~'
Tags
ENCODE_FILTER
Excluded (in ASCII decimal): 0-8, 10-31, 34, 40-41, 44, 58-60, 62, 64, 91-93, 127
public
mixed
ENCODE_FILTER
= "\x00\x01\x02\x03\x04\x05\x06\x07\x08\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\"(),:;<>@[\\]"
Tags
Properties
$ids
List of message IDs parsed.
public
array<string|int, mixed>
$ids
= array()
$_comments
Comment cache.
protected
string
$_comments
= array()
$_data
The address string to parse.
protected
string
$_data
$_datalen
Length of the address string.
protected
int
$_datalen
$_listob
List object to return in parseAddressList().
protected
Horde_Mail_Rfc822_List
$_listob
$_params
Configuration parameters.
protected
array<string|int, mixed>
$_params
= array()
$_ptr
Data pointer.
protected
int
$_ptr
Methods
__construct()
Constructor.
public
__construct([string $value = null ]) : mixed
Parameters
- $value : string = null
-
Identification field value to parse.
Return values
mixed —approximateCount()
Returns an approximate count of how many addresses are in the string.
public
approximateCount(string $data) : int
This is APPROXIMATE as it only splits based on a comma which has no preceding backslash.
Parameters
- $data : string
-
Addresses to count.
Return values
int —Approximate count.
encode()
Quotes and escapes the given string if necessary using rules contained in RFC 2822 [3.2.5].
public
encode(string $str[, string $type = 'address' ]) : string
Parameters
- $str : string
-
The string to be quoted and escaped.
- $type : string = 'address'
-
Either 'address', 'comment' (@since 2.6.0), or 'personal'.
Return values
string —The correctly quoted and escaped string.
isValidInetAddress()
Validates whether an email is of the common internet form: <user>@<domain>. This can be sufficient for most people.
public
isValidInetAddress(string $data[, bool $strict = false ]) : mixed
Optional stricter mode can be utilized which restricts mailbox characters allowed to: alphanumeric, full stop, hyphen, and underscore.
Parameters
- $data : string
-
Address to check.
- $strict : bool = false
-
Strict check?
Return values
mixed —False if it fails, an indexed array username/domain if it matches.
parse()
Parse an identification header.
public
parse(string|null $value) : mixed
Parameters
- $value : string|null
-
Identification field value to parse.
Return values
mixed —parseAddressList()
Starts the whole process.
public
parseAddressList(mixed $address[, array<string|int, mixed> $params = array() ]) : Horde_Mail_Rfc822_List
Parameters
- $address : mixed
-
The address(es) to validate. Either a string, a Horde_Mail_Rfc822_Object, or an array of strings and/or Horde_Mail_Rfc822_Objects.
- $params : array<string|int, mixed> = array()
-
Optional parameters:
- default_domain: (string) Default domain/host. DEFAULT: None
- group: (boolean) Return a GroupList object instead of a List object? DEFAULT: false
- limit: (integer) Stop processing after this many addresses. DEFAULT: No limit (0)
- validate: (mixed) Strict validation of personal part data? If false, attempts to allow non-ASCII characters and non-quoted strings in the personal data, and will silently abort if an unparseable address is found. If true, does strict RFC 5322 (ASCII-only) parsing. If 'eai' (@since 2.5.0), allows RFC 6532 (EAI/UTF-8) addresses. DEFAULT: false
Tags
Return values
Horde_Mail_Rfc822_List —A list object.
trimAddress()
If an email address has no personal information, get rid of any angle brackets (<>) around it.
public
trimAddress(string $address) : string
Parameters
- $address : string
-
The address to trim.
Return values
string —The trimmed address.
_curr()
Return current character.
protected
_curr([bool $advance = false ]) : string
Parameters
- $advance : bool = false
-
If true, advance the cursor.
Return values
string —The current character (false if EOF reached).
_parseAddress()
address = mailbox / group
protected
_parseAddress() : mixed
Return values
mixed —_parseAddressList()
address-list = (address *("," address)) / obs-addr-list
protected
_parseAddressList() : mixed
Return values
mixed —_parseAddrSpec()
addr-spec = local-part "@" domain
protected
_parseAddrSpec() : mixed
Tags
Return values
mixed —Mailbox object.
_parseAngleAddr()
"<" [ "@" route ":" ] local-part "@" domain ">"
protected
_parseAngleAddr() : mixed
Tags
Return values
mixed —Mailbox object, or false.
_parseDomainList()
obs-domain-list = "@" domain *(*(CFWS / "," ) [CFWS] "@" domain)
protected
_parseDomainList() : array<string|int, mixed>
Tags
Return values
array<string|int, mixed> —Routes.
_parseGroup()
group = display-name ":" [mailbox-list / CFWS] ";" [CFWS] display-name = phrase
protected
_parseGroup() : bool
Tags
Return values
bool —True if a group was parsed.
_parseLocalPart()
local-part = dot-atom / quoted-string / obs-local-part obs-local-part = word *("." word)
protected
_parseLocalPart() : string
Tags
Return values
string —The local part.
_parseMailbox()
mailbox = name-addr / addr-spec
protected
_parseMailbox() : mixed
Return values
mixed —Mailbox object if mailbox was parsed, or false.
_parseNameAddr()
name-addr = [display-name] angle-addr display-name = phrase
protected
_parseNameAddr() : mixed
Return values
mixed —Mailbox object, or false.
_rfc822IsAtext()
Check if data is an atom.
protected
_rfc822IsAtext(string $chr[, string $validate = null ]) : bool
Parameters
- $chr : string
-
The character to check.
- $validate : string = null
-
If in non-validate mode, use these characters as the non-atom delimiters.
Return values
bool —True if a valid atom.
_rfc822ParseAtomOrDot()
atom = [CFWS] 1*atext [CFWS] atext = ; Any character except controls, SP, and specials.
protected
_rfc822ParseAtomOrDot(string &$str) : mixed
This method doesn't just silently skip over WS.
Parameters
- $str : string
-
The atom/dot data.
Tags
Return values
mixed —_rfc822ParseDomain()
domain = dot-atom / domain-literal / obs-domain domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] obs-domain = atom *("." atom)
protected
_rfc822ParseDomain(string &$str) : mixed
Parameters
- $str : string
-
The domain string.
Tags
Return values
mixed —_rfc822ParseDomainLiteral()
domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] dcontent = dtext / quoted-pair dtext = NO-WS-CTL / ; Non white space controls %d33-90 / ; The rest of the US-ASCII %d94-126 ; characters not including "[", ; "]", or "\"
protected
_rfc822ParseDomainLiteral(string &$str) : mixed
Parameters
- $str : string
-
The domain string.
Tags
Return values
mixed —_rfc822ParseDotAtom()
dot-atom = [CFWS] dot-atom-text [CFWS] dot-atom-text = 1*atext *("." 1*atext)
protected
_rfc822ParseDotAtom(string &$str[, string $validate = null ]) : mixed
atext = ; Any character except controls, SP, and specials.
For RFC-822 compatibility allow LWSP around '.'.
Parameters
- $str : string
-
The atom/dot data.
- $validate : string = null
-
Use these characters as delimiter.
Tags
Return values
mixed —_rfc822ParsePhrase()
phrase = 1*word / obs-phrase word = atom / quoted-string obs-phrase = word *(word / "." / CFWS)
protected
_rfc822ParsePhrase(string &$phrase) : mixed
Parameters
- $phrase : string
-
The phrase data.
Tags
Return values
mixed —_rfc822ParseQuotedString()
protected
_rfc822ParseQuotedString(mixed &$str) : mixed
Parameters
- $str : mixed
Tags
Return values
mixed —_rfc822SkipComment()
protected
_rfc822SkipComment() : mixed
Tags
Return values
mixed —_rfc822SkipLwsp()
protected
_rfc822SkipLwsp([bool $advance = false ]) : mixed
Parameters
- $advance : bool = false
-
Advance cursor?
Tags
Return values
mixed —_parseMessageId()
Message IDs are defined in RFC 5322 [3.6.4]. In short, they can only contain one '@' character. However, Outlook can produce invalid Message-IDs containing multiple '@' characters, which will fail the strict RFC checks.
private
_parseMessageId() : string
Since we don't care about the structure/details of the Message-ID, just do a basic parse that considers all characters inside of angled brackets to be valid.
Tags
Return values
string —A full Message-ID (enclosed in angled brackets).