diff --git a/src/Parse.php b/src/Parse.php index 29773fe..39179e3 100644 --- a/src/Parse.php +++ b/src/Parse.php @@ -715,7 +715,7 @@ private function handleQuote(array &$emailAddress): void $emailAddress['address_temp'] = ''; if ($emailAddress['address_temp_period'] > 0) { $emailAddress['invalid'] = true; - $emailAddress['invalid_reason'] = 'Periods within the name of an email address must appear in quotes, such as "John Q. Public" '; + $emailAddress['invalid_reason'] = 'Periods within the display name of an email address must appear in quotes, such as "John Q. Public" according to RFC 5322'; } } } diff --git a/tests/ParseTest.php b/tests/ParseTest.php index 28ce1a3..523f649 100644 --- a/tests/ParseTest.php +++ b/tests/ParseTest.php @@ -22,8 +22,11 @@ public function testParseEmailAddresses() // Check if test specifies use_whitespace_as_separator option $useWhitespaceAsSeparator = $test['use_whitespace_as_separator'] ?? true; - // Configure Parse to support both comma and semicolon as separators - $options = new ParseOptions(['%', '!'], [',', ';'], $useWhitespaceAsSeparator); + // Check if test specifies custom separators + $separators = $test['separators'] ?? [',', ';']; + + // Configure Parse to support configured separators + $options = new ParseOptions(['%', '!'], $separators, $useWhitespaceAsSeparator); $parser = new Parse(null, $options); $this->assertSame($result, $parser->parse($emails, $multiple)); diff --git a/tests/testspec.yml b/tests/testspec.yml index 52d7285..b72b0f1 100644 --- a/tests/testspec.yml +++ b/tests/testspec.yml @@ -83,7 +83,7 @@ domain: '' ip: '' invalid: true - invalid_reason: 'Periods within the name of an email address must appear in quotes, such as "John Q. Public" ' + invalid_reason: 'Periods within the display name of an email address must appear in quotes, such as "John Q. Public" according to RFC 5322' - emails: 'test.testing@asdf.ghjkl.com test.testing2@asdf.ghjkl.com' multiple: true @@ -1715,3 +1715,201 @@ ip: '' invalid: false invalid_reason: null +- + emails: 'john@example.com;jane@example.com' + multiple: true + separators: [','] + use_whitespace_as_separator: false + result: + success: false + reason: 'Invalid email address' + email_addresses: + - + address: '' + simple_address: '' + original_address: 'john@example.com;jane@example.com' + name: '' + name_parsed: '' + local_part: john + local_part_parsed: john + domain_part: 'example.com' + domain: 'example.com' + ip: '' + invalid: true + invalid_reason: 'Invalid character found in domain of email address (please put in quotes if needed): '';''' +- + emails: 'john@example.com, jane@example.com' + multiple: true + separators: [';'] + use_whitespace_as_separator: false + result: + success: false + reason: 'Invalid email address' + email_addresses: + - + address: '' + simple_address: '' + original_address: 'john@example.com, jane@example.com' + name: '' + name_parsed: '' + local_part: john + local_part_parsed: john + domain_part: 'example.com' + domain: 'example.com' + ip: '' + invalid: true + invalid_reason: 'Invalid character found in domain of email address (please put in quotes if needed): '',''' +- + emails: 'john@example.com, jane@example.com' + multiple: true + separators: [','] + result: + success: true + reason: null + email_addresses: + - + address: john@example.com + simple_address: john@example.com + original_address: john@example.com + name: '' + name_parsed: '' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + - + address: jane@example.com + simple_address: jane@example.com + original_address: jane@example.com + name: '' + name_parsed: '' + local_part: jane + local_part_parsed: jane + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null +- + emails: 'john@example.com; jane@example.com' + multiple: true + separators: [';'] + result: + success: true + reason: null + email_addresses: + - + address: john@example.com + simple_address: john@example.com + original_address: john@example.com + name: '' + name_parsed: '' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + - + address: jane@example.com + simple_address: jane@example.com + original_address: jane@example.com + name: '' + name_parsed: '' + local_part: jane + local_part_parsed: jane + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null +- + emails: '"Smith, John" ' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: '"Smith, John" ' + simple_address: john@example.com + original_address: '"Smith, John" ' + name: '"Smith, John"' + name_parsed: 'Smith, John' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null +- + emails: '"Smith, John" , "Doe, Jane" ' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: '"Smith, John" ' + simple_address: john@example.com + original_address: '"Smith, John" ' + name: '"Smith, John"' + name_parsed: 'Smith, John' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + - + address: '"Doe, Jane" ' + simple_address: jane@example.com + original_address: '"Doe, Jane" ' + name: '"Doe, Jane"' + name_parsed: 'Doe, Jane' + local_part: jane + local_part_parsed: jane + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null +- + emails: 'Smith, John ' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - + address: '' + simple_address: '' + original_address: Smith + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: 'Misplaced separator or missing "@" symbol' + - + address: 'John ' + simple_address: john@example.com + original_address: 'John ' + name: John + name_parsed: John + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null