This function does NOT test the syntax of either the local part, or the host part, it will permit illegal characters on either side.
Note that 'host' refers to the email domain, not actually to any host.
The at domain list is an obsolete addressing method which was available for routing email. RFC2822 says that it must be accepted, but should be ignored in routing.
Note that if an address doesn't contain a personal part, or an "at domain list", that part of the array will be missing.
Although RFC2822 permits consecutive comma separators in a list of email addresses, this function does not. That's probably a bug.
In the following list of examples, #4 uses an "at domain list", #5 and after are illegal domains, but only the last actually generates an error.
$adds = 'ian eiloart <iane@example.ac.uk>,
shuf6@example.ac.uk,
blobby,
"ian,eiloart"<ian@example.ac.uk>,
<@example.com:foo@example.ac.uk>,
foo@#,
ian@-example.com,
ian@one@two';
$add_arr = imap_rfc822_parse_adrlist($adds, 'example.com');
var_export ($add_arr);
array (
0 =>
class stdClass {
var $mailbox = 'iane';
var $host = 'example.ac.uk';
var $personal = 'ian eiloart';
},
1 =>
class stdClass {
var $mailbox = 'shuf6';
var $host = 'example.ac.uk';
},
2 =>
class stdClass {
var $mailbox = 'blobby';
var $host = 'example.ac.uk';
},
3 =>
class stdClass {
var $mailbox = 'ian';
var $host = 'example.ac.uk';
var $personal = 'ian,eiloart';
},
4 =>
class stdClass {
var $mailbox = 'foo';
var $host = 'example.ac.uk';
var $adl = '@example.com';
},
5 =>
class stdClass {
var $mailbox = 'foo';
var $host = '#';
},
6 =>
class stdClass {
var $mailbox = 'ian';
var $host = '-example.com';
},
7 =>
class stdClass {
var $mailbox = 'ian';
var $host = 'one';
},
8 =>
class stdClass {
var $mailbox = 'UNEXPECTED_DATA_AFTER_ADDRESS';
var $host = '.SYNTAX-ERROR.';
},
)
imap_rfc822_parse_adrlist
(PHP 4, PHP 5)
imap_rfc822_parse_adrlist — アドレス文字列を解釈します
説明
array imap_rfc822_parse_adrlist
( string $address
, string $default_host
)
» RFC2822 の定義に基づき、アドレス文字列をパースします。
パラメータ
- address
-
アドレスを含む文字列。
- default_host
-
デフォルトのホスト名。
返り値
オブジェクトの配列を返します。オブジェクトのプロパティは以下のとおりです。
- mailbox - メールボックス名(ユーザ名)。
- host - ホスト名。
- personal - 個人名。
- adl - ドメインソースルート。
例
例1 imap_rfc822_parse_adrlist() の例
<?php
$address_string = "Joe Doe <doe@example.com>, postmaster@example.com, root";
$address_array = imap_rfc822_parse_adrlist($address_string, "example.com");
if (!is_array($address_array) || count($address_array) < 1) {
die("something is wrong\n");
}
foreach ($address_array as $id => $val) {
echo "# $id\n";
echo " mailbox : " . $val->mailbox . "\n";
echo " host : " . $val->host . "\n";
echo " personal: " . $val->personal . "\n";
echo " adl : " . $val->adl . "\n";
}
?>
上の例の出力は以下となります。
# 0 mailbox : doe host : example.com personal: Joe Doe adl : # 1 mailbox : postmaster host : example.com personal: adl : # 2 mailbox : root host : example.com personal: adl :
imap_rfc822_parse_adrlist
Ian Eiloart
17-Oct-2005 10:50
17-Oct-2005 10:50
Rainer Perske
05-Jan-2005 01:20
05-Jan-2005 01:20
Invalid addresses, if detected, set host to '.SYNTAX-ERROR.'; but not all invalid addresses get detected as such, e.g. <.@host.do.main> is considered
valid though a single dot is not a valid local part without using quotation marks.
