PHP Unconference Europe 2015

imap_rfc822_parse_adrlist

(PHP 4, PHP 5)

imap_rfc822_parse_adrlistAnaliza una cadena de dirección

Descripción

array imap_rfc822_parse_adrlist ( string $address , string $default_host )

Analiza la cadena de dirección como está definido en » RFC2822 y para cada dirección.

Parámetros

address

Una cadena que contiene direcciones

default_host

El nombre del host predeterminado

Valores devueltos

Devuelve un array de objetos. Las propiedades de los objetos son:

  • mailbox - el nombre del buzón (nombre de usuario)
  • host - el nombre del host
  • personal - el nombre personal
  • adl - ruta fuente del dominio

Ejemplos

Ejemplo #1 Ejemplo de imap_rfc822_parse_adrlist()

<?php

$cadena_dirección 
"Joe Doe <doe@example.com>, postmaster@example.com, root";
$array_dirección  imap_rfc822_parse_adrlist($cadena_dirección"example.com");
if (!
is_array($array_dirección) || count($array_dirección) < 1) {
    die(
"algo está mal\n");
}

foreach (
$array_dirección 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";
}
?>

El resultado del ejemplo sería:

# 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     :

Ver también

add a note add a note

User Contributed Notes 2 notes

up
1
Ian Eiloart
9 years ago
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.';
  },
)
up
0
Rainer Perske
9 years ago
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.
To Top