Skip to content

Email\Parse is a multiple (and single) email address parser for php that is reasonably RFC822 / RFC2822 compliant.

License

Notifications You must be signed in to change notification settings

mmucklo/email-parse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

47e6918 · Dec 5, 2024

History

59 Commits
Jan 3, 2023
May 8, 2021
Dec 5, 2024
Dec 5, 2024
Aug 5, 2019
Jul 8, 2015
May 20, 2017
Jul 15, 2013
Dec 5, 2024
Dec 5, 2024

Repository files navigation

email-parse Build Status

Email\Parse is a multiple (and single) batch email address parser that is reasonably RFC822 / RFC2822 compliant.

It parses a list of 1 to n email addresses separated by space or comma

Installation:

Add this line to your composer.json "require" section:

composer.json

    "require": {
       ...
       "mmucklo/email-parse": "*"

Usage:

use Email\Parse;

$result = Parse::getInstance()->parse("[email protected] [email protected]");

Notes:

This should be RFC 2822 compliant, although it will let a few obsolete RFC 822 addresses through such as test"test"[email protected] (note the quoted string in the middle of the address, which may be obsolete as of RFC 2822). However it wont allow escaping outside of quotes such as test@[email protected]. This would have to be written as "test@test"@xyz.com

Here are a few other examples:

"John Q. Public" <[email protected]>
[email protected]
how-about-an-ip@[10.0.10.2]
how-about-comments(this is a comment!!)@xyz.com

Function Spec

/**
 * function parse($emails, $multiple = true, $encoding = 'UTF-8')
 * @param string $emails List of Email addresses separated by comma or space if multiple
 * @param bool $multiple (optional, default: true) Whether to parse for multiple email addresses or not
 * @param string $encoding (optional, default: 'UTF-8')The encoding if not 'UTF-8'
 * @return: see below: */

    if ($multiple):
         array('success' => boolean, // whether totally successful or not
               'reason' => string, // if unsuccessful, the reason why
               'email_addresses' =>
                    array('address' => string, // the full address (not including comments)
                        'original_address' => string, // the full address including comments
                        'simple_address' => string, // simply local_part@domain_part (e.g. [email protected])
                         'name' => string, // the name on the email if given (e.g.: John Q. Public), including any quotes
                         'name_parsed' => string, // the name on the email if given (e.g.: John Q. Public), excluding any quotes
                        'local_part' => string, // the local part (before the '@' sign - e.g. johnpublic)
                        'local_part_parsed' => string, // the local part (before the '@' sign - e.g. johnpublic), excluding any quotes
                        'domain' => string, // the domain after the '@' if given
                         'ip' => string, // the IP after the '@' if given
                         'domain_part' => string, // either domain or IP depending on what given
                        'invalid' => boolean, // if the email is valid or not
                        'invalid_reason' => string), // if the email is invalid, the reason why
                    array( .... ) // the next email address matched
        )
    else:
        array('address' => string, // the full address including comments
            'name' => string, // the name on the email if given (e.g.: John Q. Public)
            'local_part' => string, // the local part (before the '@' sign - e.g. johnpublic)
            'domain' => string, // the domain after the '@' if given
            'ip' => string, // the IP after the '@' if given
            'invalid' => boolean, // if the email is valid or not
            'invalid_reason' => string) // if the email is invalid, the reason why
    endif;

Other Examples:

 $email = "\"J Doe\" <[email protected]>";
 $result = Email\Parse->getInstance()->parse($email, false);

 $result == array('address' => '"JD" <[email protected]>',
          'original_address' => '"JD" <[email protected]>',
          'name' => '"JD"',
          'name_parsed' => 'J Doe',
          'local_part' => 'johndoe',
          'local_part_parsed' => 'johndoe',
          'domain_part' => 'xyz.com',
          'domain' => 'xyz.com',
          'ip' => '',
          'invalid' => false,
          'invalid_reason' => '');

 $emails = "testing@[10.0.10.45] [email protected], testing-"test...2"@xyz.com (comment)";
 $result = Email\Parse->getInstance()->parse($emails);
 $result == array(
            'success' => boolean true
            'reason' => null
            'email_addresses' =>
                array(
                array(
                    'address' => 'testing@[10.0.10.45]',
                    'original_address' => 'testing@[10.0.10.45]',
                    'name' => '',
                    'name_parsed' => '',
                    'local_part' => 'testing',
                    'local_part_parsed' => 'testing',
                    'domain_part' => '10.0.10.45',
                    'domain' => '',
                    'ip' => '10.0.10.45',
                    'invalid' => false,
                    'invalid_reason' => ''),
                array(
                    'address' => '[email protected]',
                    'original_address' => '[email protected]',
                    'name' => '',
                    'name_parsed' => '',
                    'local_part' => 'testing',
                    'local_part' => 'testing',
                    'domain_part' => 'xyz.com',
                    'domain' => 'xyz.com',
                    'ip' => '',
                    'invalid' => false,
                    'invalid_reason' => '')
                array(
                    'address' => '"testing-test...2"@xyz.com',
                    'original_address' => 'testing-"test...2"@xyz.com (comment)',
                    'name' => '',
                    'name_parsed' => '',
                    'local_part' => '"testing-test2"',
                    'local_part_parsed' => 'testing-test...2',
                    'domain_part' => 'xyz.com',
                    'domain' => 'xyz.com',
                    'ip' => '',
                    'invalid' => false,
                    'invalid_reason' => '')
                )
            );

About

Email\Parse is a multiple (and single) email address parser for php that is reasonably RFC822 / RFC2822 compliant.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages