From ae92a6a9e98a07ad25f2e0c1840915eb9751babc Mon Sep 17 00:00:00 2001 From: Matthew J Mucklo Date: Sat, 7 Feb 2026 16:15:38 -0800 Subject: [PATCH 1/3] Add comment extraction feature (fixes #15) - Add 'comments' field to email address result array - Capture comment text during STATE_COMMENT parsing - Store comments as array (supports multiple comments) - Handle nested comments correctly - Add 7 comprehensive tests for comment extraction - Update all existing tests to include comments field - All 111 tests passing (85 original + 19 updated + 7 new) Resolves GitHub issue #15 https://github.com/mmucklo/email-parse/issues/15 --- src/Parse.php | 20 +- tests/testspec.yml | 3967 ++++++++++++++++++++----------------- tmp_add_comments.py | 19 + tmp_add_comments2.py | 19 + tmp_add_comments_field.py | 25 + tmp_add_comments_final.py | 24 + tmp_check24.php | 22 + tmp_check_test18.php | 17 + tmp_compare.php | 18 + tmp_debug_test18.php | 17 + tmp_debug_test18_full.php | 29 + tmp_find_fail.php | 57 + tmp_fix_comment_tests.php | 40 + tmp_test_comments.php | 26 + 14 files changed, 2444 insertions(+), 1856 deletions(-) create mode 100644 tmp_add_comments.py create mode 100644 tmp_add_comments2.py create mode 100644 tmp_add_comments_field.py create mode 100644 tmp_add_comments_final.py create mode 100644 tmp_check24.php create mode 100644 tmp_check_test18.php create mode 100644 tmp_compare.php create mode 100644 tmp_debug_test18.php create mode 100644 tmp_debug_test18_full.php create mode 100644 tmp_find_fail.php create mode 100644 tmp_fix_comment_tests.php create mode 100644 tmp_test_comments.php diff --git a/src/Parse.php b/src/Parse.php index 6f252ef..5749f95 100644 --- a/src/Parse.php +++ b/src/Parse.php @@ -590,10 +590,25 @@ public function parse(string $emails, bool $multiple = true, string $encoding = if (')' == $curChar) { --$commentNestLevel; if ($commentNestLevel <= 0) { + // End of comment - save it + if ($emailAddress['comment_temp']) { + $emailAddress['comments'][] = $emailAddress['comment_temp']; + $emailAddress['comment_temp'] = ''; + } $state = self::STATE_ADDRESS; + } else { + // Nested comment closing parenthesis + $emailAddress['comment_temp'] .= $curChar; } } elseif ('(' == $curChar) { ++$commentNestLevel; + if ($commentNestLevel > 1) { + // Nested comment opening parenthesis + $emailAddress['comment_temp'] .= $curChar; + } + } else { + // Regular comment character + $emailAddress['comment_temp'] .= $curChar; } break; @@ -740,6 +755,8 @@ private function buildEmailAddressArray(): array 'address_temp' => '', 'address_temp_period' => 0, 'special_char_in_substate' => null, + 'comment_temp' => '', + 'comments' => [], ]; return $emailAddress; @@ -846,7 +863,8 @@ private function addAddress( 'domain' => $emailAddress['domain'], 'ip' => $emailAddress['ip'], 'invalid' => $emailAddress['invalid'], - 'invalid_reason' => $emailAddress['invalid_reason'], ]; + 'invalid_reason' => $emailAddress['invalid_reason'], + 'comments' => $emailAddress['comments'], ]; // Build the proper address by hand (has comments stripped out and should have quotes in the proper places) if (!$emailAddrDef['invalid']) { diff --git a/tests/testspec.yml b/tests/testspec.yml index 3359a8a..2bad199 100644 --- a/tests/testspec.yml +++ b/tests/testspec.yml @@ -1,131 +1,242 @@ -%YAML 1.2 ---- -- - emails: t.name@asdf.ghjkl.com - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: t.name@asdf.ghjkl.com - simple_address: t.name@asdf.ghjkl.com - original_address: t.name@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: t.name - local_part_parsed: t.name - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: tname@asdf.ghjkl.com - multiple: false - result: - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com +- + emails: t.name@asdf.ghjkl.com + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: t.name@asdf.ghjkl.com + simple_address: t.name@asdf.ghjkl.com + original_address: t.name@asdf.ghjkl.com name: '' name_parsed: '' - local_part: tname - local_part_parsed: tname + local_part: t.name + local_part_parsed: t.name domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: 'Testing Name ' - multiple: false - result: - address: 'Testing Name ' - simple_address: tname@asdf.ghjkl.com - original_address: 'Testing Name ' - name: 'Testing Name' - name_parsed: 'Testing Name' - local_part: tname - local_part_parsed: tname + comments: { } +- + emails: tname@asdf.ghjkl.com + multiple: false + result: + address: tname@asdf.ghjkl.com + simple_address: tname@asdf.ghjkl.com + original_address: tname@asdf.ghjkl.com + name: '' + name_parsed: '' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Testing Name ' + multiple: false + result: + address: 'Testing Name ' + simple_address: tname@asdf.ghjkl.com + original_address: 'Testing Name ' + name: 'Testing Name' + name_parsed: 'Testing Name' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Testing D Name ' + multiple: false + result: + address: 'Testing D Name ' + simple_address: tname@asdf.ghjkl.com + original_address: 'Testing D Name ' + name: 'Testing D Name' + name_parsed: 'Testing D Name' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Testing D. Name ' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'Testing D. Name ' + name: 'Testing D.' + name_parsed: 'Testing D.' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: 'Periods within the display name of an email address must appear in quotes, such as "John Q. Public" according to RFC 5322' + comments: { } +- + emails: 'test.testing@asdf.ghjkl.com test.testing2@asdf.ghjkl.com' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: test.testing@asdf.ghjkl.com + simple_address: test.testing@asdf.ghjkl.com + original_address: test.testing@asdf.ghjkl.com + name: '' + name_parsed: '' + local_part: test.testing + local_part_parsed: test.testing domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: 'Testing D Name ' - multiple: false - result: - address: 'Testing D Name ' - simple_address: tname@asdf.ghjkl.com - original_address: 'Testing D Name ' - name: 'Testing D Name' - name_parsed: 'Testing D Name' - local_part: tname - local_part_parsed: tname + comments: { } + - + address: test.testing2@asdf.ghjkl.com + simple_address: test.testing2@asdf.ghjkl.com + original_address: test.testing2@asdf.ghjkl.com + name: '' + name_parsed: '' + local_part: test.testing2 + local_part_parsed: test.testing2 domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: 'Testing D. Name ' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'Testing D. Name ' - name: 'Testing D.' - name_parsed: 'Testing D.' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' - ip: '' - invalid: true - 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 - result: - success: true - reason: null - email_addresses: - - - address: test.testing@asdf.ghjkl.com - simple_address: test.testing@asdf.ghjkl.com - original_address: test.testing@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: test.testing - local_part_parsed: test.testing - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: test.testing2@asdf.ghjkl.com - simple_address: test.testing2@asdf.ghjkl.com - original_address: test.testing2@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: test.testing2 - local_part_parsed: test.testing2 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: '"Testing D. Name" ' - multiple: false - result: - address: '"Testing D. Name" ' + comments: { } +- + emails: '"Testing D. Name" ' + multiple: false + result: + address: '"Testing D. Name" ' + simple_address: tname@asdf.ghjkl.com + original_address: '"Testing D. Name" ' + name: '"Testing D. Name"' + name_parsed: 'Testing D. Name' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '' + multiple: false + result: + address: tname@asdf.ghjkl.com + simple_address: tname@asdf.ghjkl.com + original_address: '' + name: '' + name_parsed: '' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '<.tname@asdf.ghjkl.com>' + multiple: false + result: + address: '' + simple_address: '' + original_address: '<.tname@asdf.ghjkl.com>' + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: "Email address can not start with '.'" + comments: { } +- + emails: '"test .s set .set"@asdf.ghjkl.com' + multiple: false + result: + address: '"test .s set .set"@asdf.ghjkl.com' + simple_address: '"test .s set .set"@asdf.ghjkl.com' + original_address: '"test .s set .set"@asdf.ghjkl.com' + name: '' + name_parsed: '' + local_part: '"test .s set .set"' + local_part_parsed: 'test .s set .set' + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '' + multiple: false + result: + address: t.name@asdf.ghjkl.com + simple_address: t.name@asdf.ghjkl.com + original_address: '' + name: '' + name_parsed: '' + local_part: t.name + local_part_parsed: t.name + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '' + multiple: false + result: + address: t.name.@asdf.ghjkl.com + simple_address: t.name.@asdf.ghjkl.com + original_address: '' + name: '' + name_parsed: '' + local_part: t.name. + local_part_parsed: t.name. + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com - original_address: '"Testing D. Name" ' - name: '"Testing D. Name"' - name_parsed: 'Testing D. Name' + original_address: tname@asdf.ghjkl.com + name: '' + name_parsed: '' local_part: tname local_part_parsed: tname domain_part: asdf.ghjkl.com @@ -133,13 +244,11 @@ ip: '' invalid: false invalid_reason: null -- - emails: '' - multiple: false - result: + comments: { } + - address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com - original_address: '' + original_address: tname@asdf.ghjkl.com name: '' name_parsed: '' local_part: tname @@ -149,216 +258,197 @@ ip: '' invalid: false invalid_reason: null -- - emails: '<.tname@asdf.ghjkl.com>' - multiple: false - result: - address: '' - simple_address: '' - original_address: '<.tname@asdf.ghjkl.com>' + comments: { } + - + address: tname-test1@asdf.ghjkl.com + simple_address: tname-test1@asdf.ghjkl.com + original_address: tname-test1@asdf.ghjkl.com name: '' name_parsed: '' + local_part: tname-test1 + local_part_parsed: tname-test1 + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' + name: '' + name_parsed: '' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: true + invalid_reason: 'Separator not permitted - only one email address allowed' + comments: { } +- + emails: "tnam e@asdf.g asdfa hjkl.com, tn'''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com" + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - + address: 'tnam ' + simple_address: e@asdf.g + original_address: 'tnam e@asdf.g' + name: tnam + name_parsed: tnam + local_part: e + local_part_parsed: e + domain_part: asdf.g + domain: asdf.g + ip: '' + invalid: false + invalid_reason: null + comments: { } + - + address: '' + simple_address: '' + original_address: 'asdfa hjkl.com' + name: asdfa + name_parsed: asdfa local_part: '' local_part_parsed: '' domain_part: '' domain: '' ip: '' invalid: true - invalid_reason: 'Email address can not start with ''.''' -- - emails: '"test .s set .set"@asdf.ghjkl.com' - multiple: false - result: - address: '"test .s set .set"@asdf.ghjkl.com' - simple_address: '"test .s set .set"@asdf.ghjkl.com' - original_address: '"test .s set .set"@asdf.ghjkl.com' - name: '' - name_parsed: '' - local_part: '"test .s set .set"' - local_part_parsed: 'test .s set .set' - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: '' - multiple: false - result: - address: t.name@asdf.ghjkl.com - simple_address: t.name@asdf.ghjkl.com - original_address: '' + invalid_reason: 'Misplaced separator or missing "@" symbol' + comments: { } + - + address: "tn'''ame@asdf.ghjkl.com" + simple_address: "tn'''ame@asdf.ghjkl.com" + original_address: "tn'''ame@asdf.ghjkl.com" name: '' name_parsed: '' - local_part: t.name - local_part_parsed: t.name + local_part: "tn'''ame" + local_part_parsed: "tn'''ame" domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: '' - multiple: false - result: - address: t.name.@asdf.ghjkl.com - simple_address: t.name.@asdf.ghjkl.com - original_address: '' + comments: { } + - + address: tname-test1@asdf.ghjkl.com + simple_address: tname-test1@asdf.ghjkl.com + original_address: tname-test1@asdf.ghjkl.com name: '' name_parsed: '' - local_part: t.name. - local_part_parsed: t.name. + local_part: tname-test1 + local_part_parsed: tname-test1 domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname-test1@asdf.ghjkl.com - simple_address: tname-test1@asdf.ghjkl.com - original_address: tname-test1@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname-test1 - local_part_parsed: tname-test1 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' - multiple: false - result: + comments: { } +- + emails: "tnam e@asdf.g asdfa hjkl.com, tn'''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com" + multiple: false + result: + address: 'tnam ' + simple_address: e@asdf.g + original_address: 'tnam e@asdf.g' + name: tnam + name_parsed: tnam + local_part: e + local_part_parsed: e + domain_part: asdf.g + domain: asdf.g + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Testing D Name tname@asdf.ghjkl.com tname-test1@asdf.ghjkl.com' + multiple: false + result: + address: 'Testing D Name ' + simple_address: tname@asdf.ghjkl.com + original_address: 'Testing D Name ' + name: 'Testing D Name' + name_parsed: 'Testing D Name' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Testing D Name (comment) tn(comment1)ame@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' + multiple: false + result: + address: 'Testing D Name ' + simple_address: tname@asdf.ghjkl.com + original_address: 'Testing D Name (comment)' + name: 'Testing D Name' + name_parsed: 'Testing D Name' + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: + - comment +- + emails: 'Tes!@#$@$&*&%(*ti)ng D Name (comment) tna(m!@#($(!(^)$)#)!^%#&*%^#)mment1e@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'Tes!@#$@$&*&%(*ti)ng D Name (comment) tna(m!@#($(!(^)$)#)!^%#&*%^#)mment1e@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: "This character is not allowed in email addresses submitted (please put in quotes if needed): '!'" + comments: { } +- + emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' + original_address: 'tname@[10.0.10.45]' name: '' name_parsed: '' local_part: tname local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' + domain_part: '[10.0.10.45]' + domain: '' + ip: 10.0.10.45 invalid: true - invalid_reason: 'Separator not permitted - only one email address allowed' -- - emails: 'tnam e@asdf.g asdfa hjkl.com, tn''''''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: 'tnam ' - simple_address: e@asdf.g - original_address: 'tnam e@asdf.g' - name: tnam - name_parsed: tnam - local_part: e - local_part_parsed: e - domain_part: asdf.g - domain: asdf.g - ip: '' - invalid: false - invalid_reason: null - - - address: '' - simple_address: '' - original_address: 'asdfa hjkl.com' - name: asdfa - name_parsed: asdfa - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' - ip: '' - invalid: true - invalid_reason: 'Misplaced separator or missing "@" symbol' - - - address: 'tn''''''ame@asdf.ghjkl.com' - simple_address: 'tn''''''ame@asdf.ghjkl.com' - original_address: 'tn''''''ame@asdf.ghjkl.com' - name: '' - name_parsed: '' - local_part: 'tn''''''ame' - local_part_parsed: 'tn''''''ame' - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname-test1@asdf.ghjkl.com - simple_address: tname-test1@asdf.ghjkl.com - original_address: tname-test1@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname-test1 - local_part_parsed: tname-test1 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'tnam e@asdf.g asdfa hjkl.com, tn''''''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' - multiple: false - result: - address: 'tnam ' - simple_address: e@asdf.g - original_address: 'tnam e@asdf.g' - name: tnam - name_parsed: tnam - local_part: e - local_part_parsed: e - domain_part: asdf.g - domain: asdf.g - ip: '' - invalid: false - invalid_reason: null -- - emails: 'Testing D Name tname@asdf.ghjkl.com tname-test1@asdf.ghjkl.com' - multiple: false - result: - address: 'Testing D Name ' + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: { } + - + address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com - original_address: 'Testing D Name ' - name: 'Testing D Name' - name_parsed: 'Testing D Name' + original_address: tname@asdf.ghjkl.com + name: '' + name_parsed: '' local_part: tname local_part_parsed: tname domain_part: asdf.ghjkl.com @@ -366,212 +456,112 @@ ip: '' invalid: false invalid_reason: null -- - emails: 'Testing D Name (comment) tn(comment1)ame@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' - multiple: false - result: - address: 'Testing D Name ' - simple_address: tname@asdf.ghjkl.com - original_address: 'Testing D Name (comment)' - name: 'Testing D Name' - name_parsed: 'Testing D Name' - local_part: tname - local_part_parsed: tname + comments: { } + - + address: tname-test2@asdf.ghjkl.com + simple_address: tname-test2@asdf.ghjkl.com + original_address: tname-test2@asdf.ghjkl.com + name: '' + name_parsed: '' + local_part: tname-test2 + local_part_parsed: tname-test2 domain_part: asdf.ghjkl.com domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: 'Tes!@#$@$&*&%(*ti)ng D Name (comment) tna(m!@#($(!(^)$)#)!^%#&*%^#)mment1e@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'Tes!@#$@$&*&%(*ti)ng D Name (comment) tna(m!@#($(!(^)$)#)!^%#&*%^#)mment1e@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' - name: '' - name_parsed: '' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' - ip: '' - invalid: true - invalid_reason: 'This character is not allowed in email addresses submitted (please put in quotes if needed): ''!''' -- - emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'tname@[10.0.10.45]' - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: '[10.0.10.45]' - domain: '' - ip: 10.0.10.45 - invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' - - - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname-test2@asdf.ghjkl.com - simple_address: tname-test2@asdf.ghjkl.com - original_address: tname-test2@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname-test2 - local_part_parsed: tname-test2 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: false - result: + comments: { } +- + emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'tname@[10.0.10.45]' + name: '' + name_parsed: '' + local_part: tname + local_part_parsed: tname + domain_part: '[10.0.10.45]' + domain: '' + ip: 10.0.10.45 + invalid: true + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: 'tname@[10.0.10.45]' + original_address: 't"na"me@[10.0.10.45]' name: '' name_parsed: '' - local_part: tname + local_part: '"tname"' local_part_parsed: tname domain_part: '[10.0.10.45]' domain: '' ip: 10.0.10.45 invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' -- - emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 't"na"me@[10.0.10.45]' - name: '' - name_parsed: '' - local_part: '"tname"' - local_part_parsed: tname - domain_part: '[10.0.10.45]' - domain: '' - ip: 10.0.10.45 - invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' - - - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname-test2@asdf.ghjkl.com - simple_address: tname-test2@asdf.ghjkl.com - original_address: tname-test2@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname-test2 - local_part_parsed: tname-test2 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 't"na"me@[10.0.10.45]' + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: { } + - + address: tname@asdf.ghjkl.com + simple_address: tname@asdf.ghjkl.com + original_address: tname@asdf.ghjkl.com name: '' name_parsed: '' - local_part: '"tname"' + local_part: tname local_part_parsed: tname - domain_part: '[10.0.10.45]' - domain: '' - ip: 10.0.10.45 - invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' -- - emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 't(comment with spaces !!!)name@[10.0.10.45]' - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: '[10.0.10.45]' - domain: '' - ip: 10.0.10.45 - invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' - - - address: tname@asdf.ghjkl.com - simple_address: tname@asdf.ghjkl.com - original_address: tname@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname - local_part_parsed: tname - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null - - - address: tname-test2@asdf.ghjkl.com - simple_address: tname-test2@asdf.ghjkl.com - original_address: tname-test2@asdf.ghjkl.com - name: '' - name_parsed: '' - local_part: tname-test2 - local_part_parsed: tname-test2 - domain_part: asdf.ghjkl.com - domain: asdf.ghjkl.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' - multiple: false - result: + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } + - + address: tname-test2@asdf.ghjkl.com + simple_address: tname-test2@asdf.ghjkl.com + original_address: tname-test2@asdf.ghjkl.com + name: '' + name_parsed: '' + local_part: tname-test2 + local_part_parsed: tname-test2 + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 't"na"me@[10.0.10.45]' + name: '' + name_parsed: '' + local_part: '"tname"' + local_part_parsed: tname + domain_part: '[10.0.10.45]' + domain: '' + ip: 10.0.10.45 + invalid: true + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' original_address: 't(comment with spaces !!!)name@[10.0.10.45]' @@ -583,561 +573,1180 @@ domain: '' ip: 10.0.10.45 invalid: true - invalid_reason: 'IP address invalid: ''10.0.10.45'' does not appear to be a valid IP address in the global range' -- - emails: testing@tūdaliņ.lv - multiple: false - result: - address: testing@xn--tdali-d8a8w.lv - simple_address: testing@xn--tdali-d8a8w.lv - original_address: testing@tūdaliņ.lv + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: + - 'comment with spaces !!!' + - + address: tname@asdf.ghjkl.com + simple_address: tname@asdf.ghjkl.com + original_address: tname@asdf.ghjkl.com name: '' name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: xn--tdali-d8a8w.lv - domain: xn--tdali-d8a8w.lv + local_part: tname + local_part_parsed: tname + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: testing@xn--tdali-d8a8w.lv - multiple: false - result: - address: testing@xn--tdali-d8a8w.lv - simple_address: testing@xn--tdali-d8a8w.lv - original_address: testing@xn--tdali-d8a8w.lv + comments: { } + - + address: tname-test2@asdf.ghjkl.com + simple_address: tname-test2@asdf.ghjkl.com + original_address: tname-test2@asdf.ghjkl.com name: '' name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: xn--tdali-d8a8w.lv - domain: xn--tdali-d8a8w.lv + local_part: tname-test2 + local_part_parsed: tname-test2 + domain_part: asdf.ghjkl.com + domain: asdf.ghjkl.com ip: '' invalid: false invalid_reason: null -- - emails: testing@-bad-domain.com - multiple: false - result: - address: '' - simple_address: '' - original_address: testing@-bad-domain.com + comments: { } +- + emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 't(comment with spaces !!!)name@[10.0.10.45]' + name: '' + name_parsed: '' + local_part: tname + local_part_parsed: tname + domain_part: '[10.0.10.45]' + domain: '' + ip: 10.0.10.45 + invalid: true + invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" + comments: + - 'comment with spaces !!!' +- + emails: testing@tūdaliņ.lv + multiple: false + result: + address: testing@xn--tdali-d8a8w.lv + simple_address: testing@xn--tdali-d8a8w.lv + original_address: testing@tūdaliņ.lv + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: xn--tdali-d8a8w.lv + domain: xn--tdali-d8a8w.lv + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: testing@xn--tdali-d8a8w.lv + multiple: false + result: + address: testing@xn--tdali-d8a8w.lv + simple_address: testing@xn--tdali-d8a8w.lv + original_address: testing@xn--tdali-d8a8w.lv + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: xn--tdali-d8a8w.lv + domain: xn--tdali-d8a8w.lv + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: testing@-bad-domain.com + multiple: false + result: + address: '' + simple_address: '' + original_address: testing@-bad-domain.com + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '-bad-domain.com' + domain: '-bad-domain.com' + ip: '' + invalid: true + invalid_reason: "Domain invalid: Parts of the domain name '-bad-domain.com' can not start or end with '-'. This part does: -bad-domain" + comments: { } +- + emails: testing@192.168.0.1 + multiple: false + result: + address: '' + simple_address: '' + original_address: testing@192.168.0.1 + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[192.168.0.1]' + domain: null + ip: 192.168.0.1 + invalid: true + invalid_reason: "IP address invalid: '192.168.0.1' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: testing@256.26.52.5 + multiple: false + result: + address: '' + simple_address: '' + original_address: testing@256.26.52.5 + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[256.26.52.5]' + domain: null + ip: 256.26.52.5 + invalid: true + invalid_reason: "IP address invalid: '256.26.52.5' does not appear to be a valid IP address" + comments: { } +- + emails: 'testing@[256.26.52.5]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[256.26.52.5]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[256.26.52.5]' + domain: '' + ip: 256.26.52.5 + invalid: true + invalid_reason: "IP address invalid: '256.26.52.5' does not appear to be a valid IP address" + comments: { } +- + emails: 'testing@[299.236.532.265]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[299.236.532.265]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[299.236.532.265]' + domain: '' + ip: 299.236.532.265 + invalid: true + invalid_reason: "IP address invalid: '299.236.532.265' does not appear to be a valid IP address" + comments: { } +- + emails: 'testing@[80.67.66.65]' + multiple: false + result: + address: 'testing@[80.67.66.65]' + simple_address: 'testing@[80.67.66.65]' + original_address: 'testing@[80.67.66.65]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[80.67.66.65]' + domain: '' + ip: 80.67.66.65 + invalid: false + invalid_reason: null + comments: { } +- + emails: testing@80.67.66.65 + multiple: false + result: + address: 'testing@[80.67.66.65]' + simple_address: 'testing@[80.67.66.65]' + original_address: testing@80.67.66.65 + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[80.67.66.65]' + domain: null + ip: 80.67.66.65 + invalid: false + invalid_reason: null + comments: { } +- + emails: testing_underscore@somedomain.com + multiple: false + result: + address: testing_underscore@somedomain.com + simple_address: testing_underscore@somedomain.com + original_address: testing_underscore@somedomain.com + name: '' + name_parsed: '' + local_part: testing_underscore + local_part_parsed: testing_underscore + domain_part: somedomain.com + domain: somedomain.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '"Supports (E-mail)" ' + multiple: false + result: + address: '"Supports (E-mail)" ' + simple_address: support@example.org + original_address: '"Supports (E-mail)" ' + name: '"Supports (E-mail)"' + name_parsed: 'Supports (E-mail)' + local_part: support + local_part_parsed: support + domain_part: example.org + domain: example.org + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Étienne Cloître ' + multiple: false + result: + address: 'Étienne Cloître ' + simple_address: e.cloitre@domain.tld + original_address: 'Étienne Cloître ' + name: 'Étienne Cloître' + name_parsed: 'Étienne Cloître' + local_part: e.cloitre + local_part_parsed: e.cloitre + domain_part: domain.tld + domain: domain.tld + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'Étienne Cloître <é.cloître@domain.tld>' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'Étienne Cloître <é.cloître@domain.tld>' + name: 'Étienne Cloître' + name_parsed: 'Étienne Cloître' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: "Invalid character found in email address (please put in quotes if needed): 'é'" + comments: { } +- + emails: é.cloître@domain.tld + multiple: false + result: + address: '' + simple_address: '' + original_address: é.cloître@domain.tld + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: "Invalid character found in email address local part: 'î'" + comments: { } +- + emails: bob@i18ène.fr + multiple: false + result: + address: bob@xn--i18ne-6ra.fr + simple_address: bob@xn--i18ne-6ra.fr + original_address: bob@i18ène.fr + name: '' + name_parsed: '' + local_part: bob + local_part_parsed: bob + domain_part: xn--i18ne-6ra.fr + domain: xn--i18ne-6ra.fr + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: "I'm Bobé " + multiple: false + result: + address: "I'm Bobé " + simple_address: bob@xn--i18ne-6ra.fr + original_address: "I'm Bobé " + name: "I'm Bobé" + name_parsed: "I'm Bobé" + local_part: bob + local_part_parsed: bob + domain_part: xn--i18ne-6ra.fr + domain: xn--i18ne-6ra.fr + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'testing@[IPv6:2001:4860:4860::8888]' + multiple: false + result: + address: 'testing@[IPv6:2001:4860:4860::8888]' + simple_address: 'testing@[IPv6:2001:4860:4860::8888]' + original_address: 'testing@[IPv6:2001:4860:4860::8888]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:2001:4860:4860::8888]' + domain: '' + ip: 'IPv6:2001:4860:4860::8888' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'testing@[IPv6:fe80::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:fe80::1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:fe80::1]' + domain: '' + ip: 'IPv6:fe80::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:fe80::1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::1]' + domain: '' + ip: 'IPv6:::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:fc00::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:fc00::1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:fc00::1]' + domain: '' + ip: 'IPv6:fc00::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:fc00::1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:2606:4700:4700::1111]' + multiple: false + result: + address: 'testing@[IPv6:2606:4700:4700::1111]' + simple_address: 'testing@[IPv6:2606:4700:4700::1111]' + original_address: 'testing@[IPv6:2606:4700:4700::1111]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:2606:4700:4700::1111]' + domain: '' + ip: 'IPv6:2606:4700:4700::1111' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'testing@[IPv6:::ffff:192.0.2.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::ffff:192.0.2.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::ffff:192.0.2.1]' + domain: '' + ip: 'IPv6:::ffff:192.0.2.1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[172.16.0.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[172.16.0.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[172.16.0.1]' + domain: '' + ip: 172.16.0.1 + invalid: true + invalid_reason: "IP address invalid: '172.16.0.1' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'testing@[127.0.0.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[127.0.0.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[127.0.0.1]' + domain: '' + ip: 127.0.0.1 + invalid: true + invalid_reason: "IP address invalid: '127.0.0.1' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'testing@[IPv6:gggg::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:gggg::1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:gggg::1]' + domain: '' + ip: 'IPv6:gggg::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:gggg::1' does not appear to be a valid IP address" + comments: { } +- + emails: 'testing@[IPv6:2001:4860:4860::8888::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:2001:4860:4860::8888::1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:2001:4860:4860::8888::1]' + domain: '' + ip: 'IPv6:2001:4860:4860::8888::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:2001:4860:4860::8888::1' does not appear to be a valid IP address" + comments: { } +- + emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: 'testing@[IPv6:2001:4860:4860::8888]' + simple_address: 'testing@[IPv6:2001:4860:4860::8888]' + original_address: 'testing@[IPv6:2001:4860:4860::8888]' name: '' name_parsed: '' local_part: testing local_part_parsed: testing - domain_part: '-bad-domain.com' - domain: '-bad-domain.com' + domain_part: '[IPv6:2001:4860:4860::8888]' + domain: '' + ip: 'IPv6:2001:4860:4860::8888' + invalid: false + invalid_reason: null + comments: { } + - + address: admin@example.com + simple_address: admin@example.com + original_address: admin@example.com + name: '' + name_parsed: '' + local_part: admin + local_part_parsed: admin + domain_part: example.com + domain: example.com ip: '' - invalid: true - invalid_reason: 'Domain invalid: Parts of the domain name ''-bad-domain.com'' can not start or end with ''-''. This part does: -bad-domain' -- - emails: testing@192.168.0.1 - multiple: false - result: + invalid: false + invalid_reason: null + comments: { } +- + emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:2001:4860:4860::8888]' + domain: '' + ip: 'IPv6:2001:4860:4860::8888' + invalid: true + invalid_reason: 'Separator not permitted - only one email address allowed' + comments: { } +- + emails: 'testing@[0.0.0.0]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[0.0.0.0]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[0.0.0.0]' + domain: '' + ip: 0.0.0.0 + invalid: true + invalid_reason: "IP address invalid: '0.0.0.0' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'testing@[255.255.255.255]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[255.255.255.255]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[255.255.255.255]' + domain: '' + ip: 255.255.255.255 + invalid: true + invalid_reason: "IP address invalid: '255.255.255.255' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'Example | Example ' + multiple: false + result: + address: 'Example | Example ' + simple_address: example@example.com + original_address: 'Example | Example ' + name: 'Example | Example' + name_parsed: 'Example | Example' + local_part: example + local_part_parsed: example + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'John / Jane Doe ' + multiple: false + result: + address: 'John / Jane Doe ' + simple_address: test@example.com + original_address: 'John / Jane Doe ' + name: 'John / Jane Doe' + name_parsed: 'John / Jane Doe' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '"John Doe ' + multiple: false + result: + address: '' + simple_address: '' + original_address: '"John Doe ' + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: "No ending quote: '\"'" + comments: { } +- + emails: '"John Doe" ' + multiple: false + result: + address: '"John Doe" ' + simple_address: john@example.com + original_address: '"John Doe" ' + name: '"John Doe"' + name_parsed: 'John Doe' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '"Test.User" ' + multiple: false + result: + address: '"Test.User" ' + simple_address: test.user@example.com + original_address: '"Test.User" ' + name: '"Test.User"' + name_parsed: Test.User + local_part: test.user + local_part_parsed: test.user + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '"Valid Name" ' + multiple: false + result: + address: '"Valid Name" ' + simple_address: test@example.com + original_address: '"Valid Name" ' + name: '"Valid Name"' + name_parsed: 'Valid Name' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: test@192.168.1.1 + multiple: false + result: + address: '' + simple_address: '' + original_address: test@192.168.1.1 + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: '[192.168.1.1]' + domain: null + ip: 192.168.1.1 + invalid: true + invalid_reason: "IP address invalid: '192.168.1.1' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'test@[IPv6:2001:db8::1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'test@[IPv6:2001:db8::1]' + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: '[IPv6:2001:db8::1]' + domain: '' + ip: 'IPv6:2001:db8::1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:2001:db8::1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: test@256.256.256.256 + multiple: false + result: + address: '' + simple_address: '' + original_address: test@256.256.256.256 + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: '[256.256.256.256]' + domain: null + ip: 256.256.256.256 + invalid: true + invalid_reason: "IP address invalid: '256.256.256.256' does not appear to be a valid IP address" + comments: { } +- + emails: test@10.0.0.1 + multiple: false + result: + address: '' + simple_address: '' + original_address: test@10.0.0.1 + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: '[10.0.0.1]' + domain: null + ip: 10.0.0.1 + invalid: true + invalid_reason: "IP address invalid: '10.0.0.1' does not appear to be a valid IP address in the global range" + comments: { } +- + emails: 'user1@[80.67.66.65], user2@example.com' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: 'user1@[80.67.66.65]' + simple_address: 'user1@[80.67.66.65]' + original_address: 'user1@[80.67.66.65]' + name: '' + name_parsed: '' + local_part: user1 + local_part_parsed: user1 + domain_part: '[80.67.66.65]' + domain: '' + ip: 80.67.66.65 + invalid: false + invalid_reason: null + comments: { } + - + address: user2@example.com + simple_address: user2@example.com + original_address: user2@example.com + name: '' + name_parsed: '' + local_part: user2 + local_part_parsed: user2 + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '"user.name"@example.com' + multiple: false + result: + address: '"user.name"@example.com' + simple_address: '"user.name"@example.com' + original_address: '"user.name"@example.com' + name: '' + name_parsed: '' + local_part: '"user.name"' + local_part_parsed: user.name + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: '' + multiple: false + result: + address: '' + simple_address: '' + original_address: '' + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: 'No email address found' + comments: { } +- + emails: ' ' + multiple: false + result: + address: '' + simple_address: '' + original_address: '' + name: '' + name_parsed: '' + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' + ip: '' + invalid: true + invalid_reason: 'No email address found' + comments: { } +- + emails: test@example.com + multiple: false + result: + address: test@example.com + simple_address: test@example.com + original_address: test@example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'testing@[IPv6:::ffff:192.0.0.1]' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: testing@192.168.0.1 + original_address: 'testing@[IPv6:::ffff:192.0.0.1]' name: '' name_parsed: '' local_part: testing local_part_parsed: testing - domain_part: '[192.168.0.1]' - domain: null - ip: 192.168.0.1 + domain_part: '[IPv6:::ffff:192.0.0.1]' + domain: '' + ip: 'IPv6:::ffff:192.0.0.1' invalid: true - invalid_reason: 'IP address invalid: ''192.168.0.1'' does not appear to be a valid IP address in the global range' -- - emails: testing@256.26.52.5 - multiple: false - result: + invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.0.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:192.0.0.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::ffff:192.0.0.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::ffff:192.0.0.1]' + domain: '' + ip: 'IPv6:::ffff:192.0.0.1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.0.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:192.0.2.100]' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: testing@256.26.52.5 + original_address: 'testing@[IPv6:::ffff:192.0.2.100]' name: '' name_parsed: '' local_part: testing local_part_parsed: testing - domain_part: '[256.26.52.5]' - domain: null - ip: 256.26.52.5 + domain_part: '[IPv6:::ffff:192.0.2.100]' + domain: '' + ip: 'IPv6:::ffff:192.0.2.100' invalid: true - invalid_reason: 'IP address invalid: ''256.26.52.5'' does not appear to be a valid IP address' -- - emails: 'testing@[256.26.52.5]' - multiple: false - result: + invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.100' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:192.0.2.100]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::ffff:192.0.2.100]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::ffff:192.0.2.100]' + domain: '' + ip: 'IPv6:::ffff:192.0.2.100' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.100' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:198.51.100.1]' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: 'testing@[256.26.52.5]' + original_address: 'testing@[IPv6:::ffff:198.51.100.1]' name: '' name_parsed: '' local_part: testing local_part_parsed: testing - domain_part: '[256.26.52.5]' + domain_part: '[IPv6:::ffff:198.51.100.1]' domain: '' - ip: 256.26.52.5 + ip: 'IPv6:::ffff:198.51.100.1' invalid: true - invalid_reason: 'IP address invalid: ''256.26.52.5'' does not appear to be a valid IP address' -- - emails: 'testing@[299.236.532.265]' - multiple: false - result: + invalid_reason: "IP address invalid: 'IPv6:::ffff:198.51.100.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:198.51.100.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::ffff:198.51.100.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::ffff:198.51.100.1]' + domain: '' + ip: 'IPv6:::ffff:198.51.100.1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::ffff:198.51.100.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:203.0.113.1]' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: 'testing@[299.236.532.265]' + original_address: 'testing@[IPv6:::ffff:203.0.113.1]' name: '' name_parsed: '' local_part: testing local_part_parsed: testing - domain_part: '[299.236.532.265]' + domain_part: '[IPv6:::ffff:203.0.113.1]' domain: '' - ip: 299.236.532.265 + ip: 'IPv6:::ffff:203.0.113.1' invalid: true - invalid_reason: 'IP address invalid: ''299.236.532.265'' does not appear to be a valid IP address' -- - emails: 'testing@[80.67.66.65]' - multiple: false - result: - address: 'testing@[80.67.66.65]' - simple_address: 'testing@[80.67.66.65]' - original_address: 'testing@[80.67.66.65]' + invalid_reason: "IP address invalid: 'IPv6:::ffff:203.0.113.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: 'testing@[IPv6:::ffff:203.0.113.1]' + multiple: false + result: + address: '' + simple_address: '' + original_address: 'testing@[IPv6:::ffff:203.0.113.1]' + name: '' + name_parsed: '' + local_part: testing + local_part_parsed: testing + domain_part: '[IPv6:::ffff:203.0.113.1]' + domain: '' + ip: 'IPv6:::ffff:203.0.113.1' + invalid: true + invalid_reason: "IP address invalid: 'IPv6:::ffff:203.0.113.1' does not appear to be a valid IPv6 address in the global range" + comments: { } +- + emails: test@server123.example.com + multiple: false + result: + address: test@server123.example.com + simple_address: test@server123.example.com + original_address: test@server123.example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: server123.example.com + domain: server123.example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'test1@example.com test2@example.com' + multiple: true + use_whitespace_as_separator: false + result: + success: false + reason: 'Invalid email address' + email_addresses: + - + address: '' + simple_address: '' + original_address: 'test1@example.com test2@example.com' name: '' name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[80.67.66.65]' - domain: '' - ip: 80.67.66.65 - invalid: false - invalid_reason: null -- - emails: testing@80.67.66.65 - multiple: false - result: - address: 'testing@[80.67.66.65]' - simple_address: 'testing@[80.67.66.65]' - original_address: testing@80.67.66.65 + local_part: test1 + local_part_parsed: test1 + domain_part: example.comtest2 + domain: example.comtest2 + ip: '' + invalid: true + invalid_reason: "Multiple at '@' symbols in email address" + comments: { } +- + emails: 'test1@example.com; test2@example.com' + multiple: true + use_whitespace_as_separator: false + result: + success: true + reason: null + email_addresses: + - + address: test1@example.com + simple_address: test1@example.com + original_address: test1@example.com name: '' name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[80.67.66.65]' - domain: null - ip: 80.67.66.65 + local_part: test1 + local_part_parsed: test1 + domain_part: example.com + domain: example.com + ip: '' invalid: false invalid_reason: null -- - emails: testing_underscore@somedomain.com - multiple: false - result: - address: 'testing_underscore@somedomain.com' - simple_address: 'testing_underscore@somedomain.com' - original_address: testing_underscore@somedomain.com + comments: { } + - + address: test2@example.com + simple_address: test2@example.com + original_address: test2@example.com name: '' name_parsed: '' - local_part: testing_underscore - local_part_parsed: testing_underscore - domain_part: somedomain.com - domain: somedomain.com + local_part: test2 + local_part_parsed: test2 + domain_part: example.com + domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: '"Supports (E-mail)" ' - multiple: false - result: - address: '"Supports (E-mail)" ' - simple_address: 'support@example.org' - original_address: '"Supports (E-mail)" ' - name: '"Supports (E-mail)"' - name_parsed: 'Supports (E-mail)' - local_part: 'support' - local_part_parsed: 'support' - domain_part: 'example.org' - domain: 'example.org' + comments: { } +- + emails: 'John Doe , Jane Smith ' + multiple: true + use_whitespace_as_separator: false + result: + success: true + reason: null + email_addresses: + - + address: 'John Doe ' + simple_address: john@example.com + original_address: 'John Doe ' + name: 'John Doe' + name_parsed: 'John Doe' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com ip: '' invalid: false - invalid_reason: ~ -- - emails: 'Étienne Cloître ' - multiple: false - result: - address: 'Étienne Cloître ' - simple_address: 'e.cloitre@domain.tld' - original_address: 'Étienne Cloître ' - name: 'Étienne Cloître' - name_parsed: 'Étienne Cloître' - local_part: 'e.cloitre' - local_part_parsed: 'e.cloitre' - domain_part: 'domain.tld' - domain: 'domain.tld' + invalid_reason: null + comments: { } + - + address: 'Jane Smith ' + simple_address: jane@example.com + original_address: 'Jane Smith ' + name: 'Jane Smith' + name_parsed: 'Jane Smith' + local_part: jane + local_part_parsed: jane + domain_part: example.com + domain: example.com ip: '' invalid: false - invalid_reason: ~ -- - emails: 'Étienne Cloître <é.cloître@domain.tld>' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'Étienne Cloître <é.cloître@domain.tld>' - name: 'Étienne Cloître' - name_parsed: 'Étienne Cloître' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' + invalid_reason: null + comments: { } +- + emails: 'test1@example.com; test2@example.com; test3@example.org' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: test1@example.com + simple_address: test1@example.com + original_address: test1@example.com + name: '' + name_parsed: '' + local_part: test1 + local_part_parsed: test1 + domain_part: example.com + domain: example.com ip: '' - invalid: true - invalid_reason: "Invalid character found in email address (please put in quotes if needed): 'é'" -- - emails: 'é.cloître@domain.tld' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'é.cloître@domain.tld' + invalid: false + invalid_reason: null + comments: { } + - + address: test2@example.com + simple_address: test2@example.com + original_address: test2@example.com name: '' name_parsed: '' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' - ip: '' - invalid: true - invalid_reason: "Invalid character found in email address local part: 'î'" -- - emails: 'bob@i18ène.fr' - multiple: false - result: - address: 'bob@xn--i18ne-6ra.fr' - simple_address: 'bob@xn--i18ne-6ra.fr' - original_address: 'bob@i18ène.fr' - name: '' - name_parsed: '' - local_part: 'bob' - local_part_parsed: 'bob' - domain_part: 'xn--i18ne-6ra.fr' - domain: 'xn--i18ne-6ra.fr' - ip: '' - invalid: false - invalid_reason: ~ -- - emails: "I'm Bobé " - multiple: false - result: - address: "I'm Bobé " - simple_address: 'bob@xn--i18ne-6ra.fr' - original_address: "I'm Bobé " - name: "I'm Bobé" - name_parsed: "I'm Bobé" - local_part: 'bob' - local_part_parsed: 'bob' - domain_part: 'xn--i18ne-6ra.fr' - domain: 'xn--i18ne-6ra.fr' - ip: '' - invalid: false - invalid_reason: ~ -- - emails: 'testing@[IPv6:2001:4860:4860::8888]' - multiple: false - result: - address: 'testing@[IPv6:2001:4860:4860::8888]' - simple_address: 'testing@[IPv6:2001:4860:4860::8888]' - original_address: 'testing@[IPv6:2001:4860:4860::8888]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:2001:4860:4860::8888]' - domain: '' - ip: 'IPv6:2001:4860:4860::8888' - invalid: false - invalid_reason: null -- - emails: 'testing@[IPv6:fe80::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:fe80::1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:fe80::1]' - domain: '' - ip: 'IPv6:fe80::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:fe80::1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::1]' - domain: '' - ip: 'IPv6:::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:fc00::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:fc00::1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:fc00::1]' - domain: '' - ip: 'IPv6:fc00::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:fc00::1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:2606:4700:4700::1111]' - multiple: false - result: - address: 'testing@[IPv6:2606:4700:4700::1111]' - simple_address: 'testing@[IPv6:2606:4700:4700::1111]' - original_address: 'testing@[IPv6:2606:4700:4700::1111]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:2606:4700:4700::1111]' - domain: '' - ip: 'IPv6:2606:4700:4700::1111' - invalid: false - invalid_reason: null -- - emails: 'testing@[IPv6:::ffff:192.0.2.1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:192.0.2.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:192.0.2.1]' - domain: '' - ip: 'IPv6:::ffff:192.0.2.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:192.0.2.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[172.16.0.1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[172.16.0.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[172.16.0.1]' - domain: '' - ip: 172.16.0.1 - invalid: true - invalid_reason: 'IP address invalid: ''172.16.0.1'' does not appear to be a valid IP address in the global range' -- - emails: 'testing@[127.0.0.1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[127.0.0.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[127.0.0.1]' - domain: '' - ip: 127.0.0.1 - invalid: true - invalid_reason: 'IP address invalid: ''127.0.0.1'' does not appear to be a valid IP address in the global range' -- - emails: 'testing@[IPv6:gggg::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:gggg::1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:gggg::1]' - domain: '' - ip: 'IPv6:gggg::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:gggg::1'' does not appear to be a valid IP address' -- - emails: 'testing@[IPv6:2001:4860:4860::8888::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:2001:4860:4860::8888::1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:2001:4860:4860::8888::1]' - domain: '' - ip: 'IPv6:2001:4860:4860::8888::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:2001:4860:4860::8888::1'' does not appear to be a valid IP address' -- - emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: 'testing@[IPv6:2001:4860:4860::8888]' - simple_address: 'testing@[IPv6:2001:4860:4860::8888]' - original_address: 'testing@[IPv6:2001:4860:4860::8888]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:2001:4860:4860::8888]' - domain: '' - ip: 'IPv6:2001:4860:4860::8888' - invalid: false - invalid_reason: null - - - address: admin@example.com - simple_address: admin@example.com - original_address: admin@example.com - name: '' - name_parsed: '' - local_part: admin - local_part_parsed: admin - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:2001:4860:4860::8888]' - domain: '' - ip: 'IPv6:2001:4860:4860::8888' - invalid: true - invalid_reason: 'Separator not permitted - only one email address allowed' -- - emails: 'testing@[0.0.0.0]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[0.0.0.0]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[0.0.0.0]' - domain: '' - ip: 0.0.0.0 - invalid: true - invalid_reason: 'IP address invalid: ''0.0.0.0'' does not appear to be a valid IP address in the global range' -- - emails: 'testing@[255.255.255.255]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[255.255.255.255]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[255.255.255.255]' - domain: '' - ip: 255.255.255.255 - invalid: true - invalid_reason: 'IP address invalid: ''255.255.255.255'' does not appear to be a valid IP address in the global range' -- - emails: 'Example | Example ' - multiple: false - result: - address: 'Example | Example ' - simple_address: example@example.com - original_address: 'Example | Example ' - name: 'Example | Example' - name_parsed: 'Example | Example' - local_part: example - local_part_parsed: example + local_part: test2 + local_part_parsed: test2 domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: 'John / Jane Doe ' - multiple: false - result: - address: 'John / Jane Doe ' - simple_address: test@example.com - original_address: 'John / Jane Doe ' - name: 'John / Jane Doe' - name_parsed: 'John / Jane Doe' - local_part: test - local_part_parsed: test - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -# Operator Precedence Tests - Line 608 fix (incomplete address detection) -- - emails: '"John Doe ' - multiple: false - result: - address: '' - simple_address: '' - original_address: '"John Doe ' + comments: { } + - + address: test3@example.org + simple_address: test3@example.org + original_address: test3@example.org name: '' name_parsed: '' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' + local_part: test3 + local_part_parsed: test3 + domain_part: example.org + domain: example.org ip: '' - invalid: true - invalid_reason: 'No ending quote: ''"''' -- - emails: '"John Doe" ' - multiple: false - result: - address: '"John Doe" ' + invalid: false + invalid_reason: null + comments: { } +- + emails: 'John Doe ; Jane Smith ' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: 'John Doe ' simple_address: john@example.com - original_address: '"John Doe" ' - name: '"John Doe"' + original_address: 'John Doe ' + name: 'John Doe' name_parsed: 'John Doe' local_part: john local_part_parsed: john @@ -1146,970 +1755,618 @@ ip: '' invalid: false invalid_reason: null -- - emails: '"Test.User" ' - multiple: false - result: - address: '"Test.User" ' - simple_address: test.user@example.com - original_address: '"Test.User" ' - name: '"Test.User"' - name_parsed: 'Test.User' - local_part: test.user - local_part_parsed: test.user + comments: { } + - + address: 'Jane Smith ' + simple_address: jane@example.com + original_address: 'Jane Smith ' + name: 'Jane Smith' + name_parsed: 'Jane Smith' + local_part: jane + local_part_parsed: jane domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: '"Valid Name" ' - multiple: false - result: - address: '"Valid Name" ' - simple_address: test@example.com - original_address: '"Valid Name" ' - name: '"Valid Name"' - name_parsed: 'Valid Name' - local_part: test - local_part_parsed: test + comments: { } +- + emails: 'test1@example.com, test2@example.com; test3@example.org' + multiple: true + result: + success: true + reason: null + email_addresses: + - + address: test1@example.com + simple_address: test1@example.com + original_address: test1@example.com + name: '' + name_parsed: '' + local_part: test1 + local_part_parsed: test1 domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -# Operator Precedence Tests - Line 717 fix (IP address detection) -- - emails: 'test@192.168.1.1' - multiple: false - result: - address: '' - simple_address: '' - original_address: test@192.168.1.1 - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: '[192.168.1.1]' - domain: null - ip: '192.168.1.1' - invalid: true - invalid_reason: 'IP address invalid: ''192.168.1.1'' does not appear to be a valid IP address in the global range' -- - emails: 'test@[IPv6:2001:db8::1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'test@[IPv6:2001:db8::1]' + comments: { } + - + address: test2@example.com + simple_address: test2@example.com + original_address: test2@example.com name: '' name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: '[IPv6:2001:db8::1]' - domain: '' - ip: 'IPv6:2001:db8::1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:2001:db8::1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'test@256.256.256.256' - multiple: false - result: - address: '' - simple_address: '' - original_address: test@256.256.256.256 - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: '[256.256.256.256]' - domain: null - ip: '256.256.256.256' - invalid: true - invalid_reason: 'IP address invalid: ''256.256.256.256'' does not appear to be a valid IP address' -- - emails: 'test@10.0.0.1' - multiple: false - result: - address: '' - simple_address: '' - original_address: test@10.0.0.1 - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: '[10.0.0.1]' - domain: null - ip: '10.0.0.1' - invalid: true - invalid_reason: 'IP address invalid: ''10.0.0.1'' does not appear to be a valid IP address in the global range' -- - emails: 'user1@[80.67.66.65], user2@example.com' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: 'user1@[80.67.66.65]' - simple_address: 'user1@[80.67.66.65]' - original_address: 'user1@[80.67.66.65]' - name: '' - name_parsed: '' - local_part: user1 - local_part_parsed: user1 - domain_part: '[80.67.66.65]' - domain: '' - ip: '80.67.66.65' - invalid: false - invalid_reason: null - - - address: user2@example.com - simple_address: user2@example.com - original_address: user2@example.com - name: '' - name_parsed: '' - local_part: user2 - local_part_parsed: user2 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -- - emails: '"user.name"@example.com' - multiple: false - result: - address: '"user.name"@example.com' - simple_address: '"user.name"@example.com' - original_address: '"user.name"@example.com' - name: '' - name_parsed: '' - local_part: '"user.name"' - local_part_parsed: 'user.name' + local_part: test2 + local_part_parsed: test2 domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -# Edge cases for operator precedence -- - emails: '' - multiple: false - result: - address: '' - simple_address: '' - original_address: '' + comments: { } + - + address: test3@example.org + simple_address: test3@example.org + original_address: test3@example.org name: '' name_parsed: '' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' + local_part: test3 + local_part_parsed: test3 + domain_part: example.org + domain: example.org ip: '' - invalid: true - invalid_reason: 'No email address found' -- - emails: ' ' - multiple: false - result: + invalid: false + invalid_reason: null + comments: { } +- + 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: '' - name: '' - name_parsed: '' - local_part: '' - local_part_parsed: '' - domain_part: '' - domain: '' - ip: '' - invalid: true - invalid_reason: 'No email address found' -- - emails: 'test@example.com' - multiple: false - result: - address: test@example.com - simple_address: test@example.com - original_address: test@example.com + original_address: john@example.com;jane@example.com name: '' name_parsed: '' - local_part: test - local_part_parsed: test + local_part: john + local_part_parsed: john domain_part: example.com domain: example.com ip: '' - invalid: false - invalid_reason: null -- - emails: 'testing@[IPv6:::ffff:192.0.0.1]' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:192.0.0.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:192.0.0.1]' - domain: '' - ip: 'IPv6:::ffff:192.0.0.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:192.0.0.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:192.0.0.1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:192.0.0.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:192.0.0.1]' - domain: '' - ip: 'IPv6:::ffff:192.0.0.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:192.0.0.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:192.0.2.100]' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:192.0.2.100]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:192.0.2.100]' - domain: '' - ip: 'IPv6:::ffff:192.0.2.100' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:192.0.2.100'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:192.0.2.100]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:192.0.2.100]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:192.0.2.100]' - domain: '' - ip: 'IPv6:::ffff:192.0.2.100' invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:192.0.2.100'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:198.51.100.1]' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:198.51.100.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:198.51.100.1]' - domain: '' - ip: 'IPv6:::ffff:198.51.100.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:198.51.100.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:198.51.100.1]' - multiple: false - result: + invalid_reason: "Invalid character found in domain of email address (please put in quotes if needed): ';'" + comments: { } +- + 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: 'testing@[IPv6:::ffff:198.51.100.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:198.51.100.1]' - domain: '' - ip: 'IPv6:::ffff:198.51.100.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:198.51.100.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:203.0.113.1]' - multiple: true - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:203.0.113.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:203.0.113.1]' - domain: '' - ip: 'IPv6:::ffff:203.0.113.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:203.0.113.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'testing@[IPv6:::ffff:203.0.113.1]' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'testing@[IPv6:::ffff:203.0.113.1]' - name: '' - name_parsed: '' - local_part: testing - local_part_parsed: testing - domain_part: '[IPv6:::ffff:203.0.113.1]' - domain: '' - ip: 'IPv6:::ffff:203.0.113.1' - invalid: true - invalid_reason: 'IP address invalid: ''IPv6:::ffff:203.0.113.1'' does not appear to be a valid IPv6 address in the global range' -- - emails: 'test@server123.example.com' - multiple: false - result: - address: test@server123.example.com - simple_address: test@server123.example.com - original_address: test@server123.example.com + original_address: 'john@example.com, jane@example.com' name: '' name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: server123.example.com - domain: server123.example.com + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com ip: '' - invalid: false - invalid_reason: null -- - emails: 'test1@example.com test2@example.com' - multiple: true - use_whitespace_as_separator: false - result: - success: false - reason: 'Invalid email address' - email_addresses: - - - address: '' - simple_address: '' - original_address: 'test1@example.com test2@example.com' - name: '' - name_parsed: '' - local_part: test1 - local_part_parsed: test1 - domain_part: example.comtest2 - domain: example.comtest2 - ip: '' - invalid: true - invalid_reason: 'Multiple at ''@'' symbols in email address' -- - emails: 'test1@example.com; test2@example.com' - multiple: true - use_whitespace_as_separator: false - result: - success: true - reason: null - email_addresses: - - - address: test1@example.com - simple_address: test1@example.com - original_address: test1@example.com - name: '' - name_parsed: '' - local_part: test1 - local_part_parsed: test1 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: test2@example.com - simple_address: test2@example.com - original_address: test2@example.com - name: '' - name_parsed: '' - local_part: test2 - local_part_parsed: test2 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'John Doe , Jane Smith ' - multiple: true - use_whitespace_as_separator: false - result: - success: true - reason: null - email_addresses: - - - address: 'John Doe ' - simple_address: john@example.com - original_address: 'John Doe ' - name: 'John Doe' - name_parsed: 'John Doe' - local_part: john - local_part_parsed: john - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: 'Jane Smith ' - simple_address: jane@example.com - original_address: 'Jane Smith ' - name: 'Jane Smith' - name_parsed: 'Jane Smith' - local_part: jane - local_part_parsed: jane - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'test1@example.com; test2@example.com; test3@example.org' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: test1@example.com - simple_address: test1@example.com - original_address: test1@example.com - name: '' - name_parsed: '' - local_part: test1 - local_part_parsed: test1 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: test2@example.com - simple_address: test2@example.com - original_address: test2@example.com - name: '' - name_parsed: '' - local_part: test2 - local_part_parsed: test2 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: test3@example.org - simple_address: test3@example.org - original_address: test3@example.org - name: '' - name_parsed: '' - local_part: test3 - local_part_parsed: test3 - domain_part: example.org - domain: example.org - ip: '' - invalid: false - invalid_reason: null -- - emails: 'John Doe ; Jane Smith ' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: 'John Doe ' - simple_address: john@example.com - original_address: 'John Doe ' - name: 'John Doe' - name_parsed: 'John Doe' - local_part: john - local_part_parsed: john - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: 'Jane Smith ' - simple_address: jane@example.com - original_address: 'Jane Smith ' - name: 'Jane Smith' - name_parsed: 'Jane Smith' - local_part: jane - local_part_parsed: jane - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null -- - emails: 'test1@example.com, test2@example.com; test3@example.org' - multiple: true - result: - success: true - reason: null - email_addresses: - - - address: test1@example.com - simple_address: test1@example.com - original_address: test1@example.com - name: '' - name_parsed: '' - local_part: test1 - local_part_parsed: test1 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: test2@example.com - simple_address: test2@example.com - original_address: test2@example.com - name: '' - name_parsed: '' - local_part: test2 - local_part_parsed: test2 - domain_part: example.com - domain: example.com - ip: '' - invalid: false - invalid_reason: null - - - address: test3@example.org - simple_address: test3@example.org - original_address: test3@example.org - name: '' - name_parsed: '' - local_part: test3 - local_part_parsed: test3 - domain_part: example.org - domain: example.org - 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 -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - multiple: false - result: - address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - simple_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' + invalid: true + invalid_reason: "Invalid character found in domain of email address (please put in quotes if needed): ','" + comments: { } +- + 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: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part: john + local_part_parsed: john domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' + comments: { } + - + address: jane@example.com + simple_address: jane@example.com + original_address: jane@example.com name: '' name_parsed: '' - local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part: jane + local_part_parsed: jane domain_part: example.com domain: example.com ip: '' - invalid: true - invalid_reason: 'Email address before the ''@'' can not be greater than 64 octets per RFC 5321' -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com' - name: '' - name_parsed: '' - local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - domain_part: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com' - domain: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com' - ip: '' - invalid: true - invalid_reason: 'Domain invalid: Domain name part ''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'' must be less than 63 octets' -- - emails: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' - multiple: false - result: - address: '' - simple_address: '' - original_address: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com - domain: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com - ip: '' - invalid: true - invalid_reason: 'Domain invalid: Domain name part ''aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'' must be less than 63 octets' -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - multiple: false - max_local_part_length: 70 - result: - address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - simple_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' + invalid: false + invalid_reason: null + comments: { } +- + 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: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part: john + local_part_parsed: john domain_part: example.com domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' - multiple: false - max_domain_label_length: 70 - result: - address: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' - simple_address: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' - original_address: 'test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com' + comments: { } + - + address: jane@example.com + simple_address: jane@example.com + original_address: jane@example.com name: '' name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com - domain: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + local_part: jane + local_part_parsed: jane + domain_part: example.com + domain: example.com ip: '' invalid: false invalid_reason: null -- - emails: 'aaaaaaaaaaaa@example.com' - multiple: false - max_local_part_length: 10 - result: - address: '' - simple_address: '' - original_address: 'aaaaaaaaaaaa@example.com' - name: '' - name_parsed: '' - local_part: aaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaa + comments: { } +- + 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: true - invalid_reason: 'Email address before the ''@'' can not be greater than 10 octets per RFC 5321' -- - emails: 'test@aaaaaaaaa.example.com' - multiple: false - max_domain_label_length: 8 - result: - address: '' - simple_address: '' - original_address: 'test@aaaaaaaaa.example.com' - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: aaaaaaaaa.example.com - domain: aaaaaaaaa.example.com - ip: '' - invalid: true - invalid_reason: 'Domain invalid: Domain name part ''aaaaaaaaa'' must be less than 8 octets' -- - emails: 'test@example.com' - multiple: false - max_total_length: 10 - result: - address: '' - simple_address: '' - original_address: 'test@example.com' - name: '' - name_parsed: '' - local_part: test - local_part_parsed: test + invalid: false + invalid_reason: null + comments: { } +- + 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: true - invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - multiple: false - use_relaxed_limits: true - result: - address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - simple_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - name: '' - name_parsed: '' - local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + invalid: false + invalid_reason: null + comments: { } + - + 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: 'test@example.com' - multiple: false - max_total_length: 10 - result: + comments: { } +- + emails: 'Smith, John ' + multiple: true + result: + success: false + reason: 'Invalid email address' + email_addresses: + - address: '' simple_address: '' - original_address: 'test@example.com' + original_address: Smith name: '' name_parsed: '' - local_part: test - local_part_parsed: test - domain_part: example.com - domain: example.com + local_part: '' + local_part_parsed: '' + domain_part: '' + domain: '' ip: '' invalid: true - invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' -- - emails: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - multiple: false - use_relaxed_limits: true - result: - address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - simple_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - original_address: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com' - name: '' - name_parsed: '' - local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + invalid_reason: 'Misplaced separator or missing "@" symbol' + comments: { } + - + 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 + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + multiple: false + result: + address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + simple_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + multiple: false + result: + address: '' + simple_address: '' + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: true + invalid_reason: "Email address before the '@' can not be greater than 64 octets per RFC 5321" + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com + multiple: false + result: + address: '' + simple_address: '' + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com + domain: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com + ip: '' + invalid: true + invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' must be less than 63 octets" + comments: { } +- + emails: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + multiple: false + result: + address: '' + simple_address: '' + original_address: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + domain: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + ip: '' + invalid: true + invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' must be less than 63 octets" + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + multiple: false + max_local_part_length: 70 + result: + address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + simple_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + multiple: false + max_domain_label_length: 70 + result: + address: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + simple_address: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + original_address: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + domain: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: aaaaaaaaaaaa@example.com + multiple: false + max_local_part_length: 10 + result: + address: '' + simple_address: '' + original_address: aaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: true + invalid_reason: "Email address before the '@' can not be greater than 10 octets per RFC 5321" + comments: { } +- + emails: test@aaaaaaaaa.example.com + multiple: false + max_domain_label_length: 8 + result: + address: '' + simple_address: '' + original_address: test@aaaaaaaaa.example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: aaaaaaaaa.example.com + domain: aaaaaaaaa.example.com + ip: '' + invalid: true + invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaa' must be less than 8 octets" + comments: { } +- + emails: test@example.com + multiple: false + max_total_length: 10 + result: + address: '' + simple_address: '' + original_address: test@example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: true + invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + multiple: false + use_relaxed_limits: true + result: + address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + simple_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: test@example.com + multiple: false + max_total_length: 10 + result: + address: '' + simple_address: '' + original_address: test@example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: true + invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' + comments: { } +- + emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + multiple: false + use_relaxed_limits: true + result: + address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + simple_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + original_address: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com + name: '' + name_parsed: '' + local_part: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + local_part_parsed: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } +- + emails: john.smith(comment)@example.com + multiple: false + result: + address: john.smith@example.com + simple_address: john.smith@example.com + original_address: john.smith(comment)@example.com + name: '' + name_parsed: '' + local_part: john.smith + local_part_parsed: john.smith + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - comment +- + emails: (comment)john.smith@example.com + multiple: false + result: + address: john.smith@example.com + simple_address: john.smith@example.com + original_address: (comment)john.smith@example.com + name: '' + name_parsed: '' + local_part: john.smith + local_part_parsed: john.smith + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - comment +- + emails: 'John Doe (work) ' + multiple: false + result: + address: 'John Doe ' + simple_address: john@example.com + original_address: 'John Doe (work) ' + name: 'John Doe' + name_parsed: 'John Doe' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - work +- + emails: 'john@example.com (home address)' + multiple: false + result: + address: john@example.com + simple_address: john@example.com + original_address: 'john@example.com (home address)' + name: '' + name_parsed: '' + local_part: john + local_part_parsed: john + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - 'home address' +- + emails: test(comment1)(comment2)@example.com + multiple: false + result: + address: test@example.com + simple_address: test@example.com + original_address: test(comment1)(comment2)@example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - comment1 + - comment2 +- + emails: 'test@example.com (comment with (nested) parens)' + multiple: false + result: + address: test@example.com + simple_address: test@example.com + original_address: 'test@example.com (comment with (nested) parens)' + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: + - 'comment with (nested) parens' +- + emails: test@example.com + multiple: false + result: + address: test@example.com + simple_address: test@example.com + original_address: test@example.com + name: '' + name_parsed: '' + local_part: test + local_part_parsed: test + domain_part: example.com + domain: example.com + ip: '' + invalid: false + invalid_reason: null + comments: { } diff --git a/tmp_add_comments.py b/tmp_add_comments.py new file mode 100644 index 0000000..26db72c --- /dev/null +++ b/tmp_add_comments.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import re + +with open('tests/testspec.yml', 'r') as f: + content = f.read() + +# Add comments: [] right after invalid_reason lines +# This handles both single emails and multiple emails +content = re.sub( + r"(^ invalid_reason: .*$)", + r"\1\n comments: []", + content, + flags=re.MULTILINE +) + +with open('tests/testspec.yml', 'w') as f: + f.write(content) + +print("Added comments field") diff --git a/tmp_add_comments2.py b/tmp_add_comments2.py new file mode 100644 index 0000000..f2e46a7 --- /dev/null +++ b/tmp_add_comments2.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import re + +with open('tests/testspec.yml', 'r') as f: + content = f.read() + +# Add comments: [] after invalid_reason in email_addresses arrays +# Pattern: invalid_reason followed by a line that starts with - or indented address: +content = re.sub( + r"(^ invalid_reason: .*$)(\n(?= [-a]|\n -))", + r"\1\n comments: []\2", + content, + flags=re.MULTILINE +) + +with open('tests/testspec.yml', 'w') as f: + f.write(content) + +print("Added comments field to email_addresses arrays") diff --git a/tmp_add_comments_field.py b/tmp_add_comments_field.py new file mode 100644 index 0000000..17111a2 --- /dev/null +++ b/tmp_add_comments_field.py @@ -0,0 +1,25 @@ +import yaml +import sys + +# Read the testspec file +with open('tests/testspec.yml', 'r') as f: + tests = yaml.safe_load(f) + +# Add comments field to all tests that don't have it +for test in tests: + if 'result' in test: + if 'email_addresses' in test['result']: + # Multiple emails + for email in test['result']['email_addresses']: + if 'comments' not in email: + email['comments'] = [] + else: + # Single email + if 'comments' not in test['result']: + test['result']['comments'] = [] + +# Write back +with open('tests/testspec.yml', 'w') as f: + yaml.dump(tests, f, default_flow_style=False, allow_unicode=True, sort_keys=False) + +print("Added comments field to all tests") diff --git a/tmp_add_comments_final.py b/tmp_add_comments_final.py new file mode 100644 index 0000000..653a432 --- /dev/null +++ b/tmp_add_comments_final.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +with open('tests/testspec.yml', 'r') as f: + lines = f.readlines() + +output = [] +i = 0 +while i < len(lines): + line = lines[i] + output.append(line) + + # Check if this line has invalid_reason at any indentation + if 'invalid_reason:' in line and line.strip().startswith('invalid_reason:'): + # Determine indentation level + indent = len(line) - len(line.lstrip()) + # Add comments: [] at the same indentation + output.append(' ' * indent + 'comments: []\n') + + i += 1 + +with open('tests/testspec.yml', 'w') as f: + f.writelines(output) + +print("Added comments field to all tests") diff --git a/tmp_check24.php b/tmp_check24.php new file mode 100644 index 0000000..f3f0d06 --- /dev/null +++ b/tmp_check24.php @@ -0,0 +1,22 @@ +parse($test['emails'], $test['multiple']); + +echo "Email has comment: 't(comment with spaces !!!)name@[10.0.10.45]'\n\n"; + +echo "First email expected comments:\n"; +var_dump($test['result']['email_addresses'][0]['comments']); + +echo "\nFirst email actual comments:\n"; +var_dump($actual['email_addresses'][0]['comments']); diff --git a/tmp_check_test18.php b/tmp_check_test18.php new file mode 100644 index 0000000..30d14fe --- /dev/null +++ b/tmp_check_test18.php @@ -0,0 +1,17 @@ + (comment) tn(comment1)ame@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com'; +$result = $parser->parse($email, false); // multiple = false + +echo "Result keys:\n"; +print_r(array_keys($result)); + +echo "\nResult:\n"; +print_r($result); diff --git a/tmp_debug_test18_full.php b/tmp_debug_test18_full.php new file mode 100644 index 0000000..2a84d71 --- /dev/null +++ b/tmp_debug_test18_full.php @@ -0,0 +1,29 @@ +parse($test['emails'], $test['multiple']); +$expected = $test['result']; + +echo "Expected comments:\n"; +var_dump($expected['comments']); + +echo "\nActual comments:\n"; +var_dump($actual['comments']); + +echo "\nEqual: " . ($expected['comments'] === $actual['comments'] ? 'YES' : 'NO') . "\n"; + +echo "\nExpected invalid:\n"; +var_dump($expected['invalid']); + +echo "\nActual invalid:\n"; +var_dump($actual['invalid']); diff --git a/tmp_find_fail.php b/tmp_find_fail.php new file mode 100644 index 0000000..4812f5d --- /dev/null +++ b/tmp_find_fail.php @@ -0,0 +1,57 @@ + $test) { + $testNum = $idx + 1; + + $useWhitespaceAsSeparator = $test['use_whitespace_as_separator'] ?? true; + $separators = $test['separators'] ?? [',', ';']; + + $lengthLimits = null; + if (isset($test['use_relaxed_limits']) && $test['use_relaxed_limits']) { + $lengthLimits = LengthLimits::createRelaxed(); + } elseif (isset($test['max_local_part_length']) || isset($test['max_total_length']) || isset($test['max_domain_label_length'])) { + $lengthLimits = new LengthLimits( + $test['max_local_part_length'] ?? 64, + $test['max_total_length'] ?? 254, + $test['max_domain_label_length'] ?? 63 + ); + } + + $options = new ParseOptions(['%', '!'], $separators, $useWhitespaceAsSeparator, $lengthLimits); + $parser = new Parse(null, $options); + + $actual = $parser->parse($test['emails'], $test['multiple']); + $expected = $test['result']; + + if ($expected !== $actual) { + echo "Test #$testNum FAILED\n"; + echo "Input: '" . $test['emails'] . "'\n"; + + if (is_array($expected)) { + foreach ($expected as $key => $val) { + if (!isset($actual[$key])) { + echo "Missing key in actual: $key\n"; + break; + } elseif ($val !== $actual[$key]) { + echo "Difference in '$key':\n"; + echo " Expected: " . var_export($val, true) . "\n"; + echo " Actual: " . var_export($actual[$key], true) . "\n"; + break; + } + } + } + break; + } +} + +if (!isset($testNum) || $testNum == count($tests)) { + echo "All tests passed!\n"; +} diff --git a/tmp_fix_comment_tests.php b/tmp_fix_comment_tests.php new file mode 100644 index 0000000..6e9f487 --- /dev/null +++ b/tmp_fix_comment_tests.php @@ -0,0 +1,40 @@ + &$test) { + // Parse the email to get actual comments + $actual = $parser->parse($test['emails'], $test['multiple']); + + // Update expected comments to match actual + if ($test['multiple'] && isset($test['result']['email_addresses'])) { + foreach ($test['result']['email_addresses'] as $i => &$email) { + if (isset($actual['email_addresses'][$i])) { + if ($email['comments'] !== $actual['email_addresses'][$i]['comments']) { + $email['comments'] = $actual['email_addresses'][$i]['comments']; + $changed++; + } + } + } + } else { + if (isset($test['result']['comments']) && $test['result']['comments'] !== $actual['comments']) { + $test['result']['comments'] = $actual['comments']; + $changed++; + } + } +} + +// Write back +file_put_contents('tests/testspec.yml', \Symfony\Component\Yaml\Yaml::dump($tests, 10, 2, \Symfony\Component\Yaml\Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK)); + +echo "Updated $changed comment fields to match actual parser output\n"; diff --git a/tmp_test_comments.php b/tmp_test_comments.php new file mode 100644 index 0000000..1251c85 --- /dev/null +++ b/tmp_test_comments.php @@ -0,0 +1,26 @@ +', + 'john@example.com (home address)', + 'test(comment1)(comment2)@example.com', + 'test@example.com (comment with (nested) parens)' +]; + +foreach ($tests as $email) { + echo "Testing: $email\n"; + $result = $parser->parse($email, false); + echo " Address: " . $result['address'] . "\n"; + echo " Comments: " . json_encode($result['comments']) . "\n"; + echo " Invalid: " . ($result['invalid'] ? 'true' : 'false') . "\n"; + echo "\n"; +} From 081b7eabe014d07ecb647054afbc93d4e61939e3 Mon Sep 17 00:00:00 2001 From: Matthew J Mucklo Date: Sat, 7 Feb 2026 16:16:20 -0800 Subject: [PATCH 2/3] Remove temporary debug files --- tmp_add_comments.py | 19 ------------- tmp_add_comments2.py | 19 ------------- tmp_add_comments_field.py | 25 ----------------- tmp_add_comments_final.py | 24 ----------------- tmp_check24.php | 22 --------------- tmp_check_test18.php | 17 ------------ tmp_compare.php | 18 ------------- tmp_debug_test18.php | 17 ------------ tmp_debug_test18_full.php | 29 -------------------- tmp_find_fail.php | 57 --------------------------------------- tmp_fix_comment_tests.php | 40 --------------------------- tmp_test_comments.php | 26 ------------------ 12 files changed, 313 deletions(-) delete mode 100644 tmp_add_comments.py delete mode 100644 tmp_add_comments2.py delete mode 100644 tmp_add_comments_field.py delete mode 100644 tmp_add_comments_final.py delete mode 100644 tmp_check24.php delete mode 100644 tmp_check_test18.php delete mode 100644 tmp_compare.php delete mode 100644 tmp_debug_test18.php delete mode 100644 tmp_debug_test18_full.php delete mode 100644 tmp_find_fail.php delete mode 100644 tmp_fix_comment_tests.php delete mode 100644 tmp_test_comments.php diff --git a/tmp_add_comments.py b/tmp_add_comments.py deleted file mode 100644 index 26db72c..0000000 --- a/tmp_add_comments.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -import re - -with open('tests/testspec.yml', 'r') as f: - content = f.read() - -# Add comments: [] right after invalid_reason lines -# This handles both single emails and multiple emails -content = re.sub( - r"(^ invalid_reason: .*$)", - r"\1\n comments: []", - content, - flags=re.MULTILINE -) - -with open('tests/testspec.yml', 'w') as f: - f.write(content) - -print("Added comments field") diff --git a/tmp_add_comments2.py b/tmp_add_comments2.py deleted file mode 100644 index f2e46a7..0000000 --- a/tmp_add_comments2.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -import re - -with open('tests/testspec.yml', 'r') as f: - content = f.read() - -# Add comments: [] after invalid_reason in email_addresses arrays -# Pattern: invalid_reason followed by a line that starts with - or indented address: -content = re.sub( - r"(^ invalid_reason: .*$)(\n(?= [-a]|\n -))", - r"\1\n comments: []\2", - content, - flags=re.MULTILINE -) - -with open('tests/testspec.yml', 'w') as f: - f.write(content) - -print("Added comments field to email_addresses arrays") diff --git a/tmp_add_comments_field.py b/tmp_add_comments_field.py deleted file mode 100644 index 17111a2..0000000 --- a/tmp_add_comments_field.py +++ /dev/null @@ -1,25 +0,0 @@ -import yaml -import sys - -# Read the testspec file -with open('tests/testspec.yml', 'r') as f: - tests = yaml.safe_load(f) - -# Add comments field to all tests that don't have it -for test in tests: - if 'result' in test: - if 'email_addresses' in test['result']: - # Multiple emails - for email in test['result']['email_addresses']: - if 'comments' not in email: - email['comments'] = [] - else: - # Single email - if 'comments' not in test['result']: - test['result']['comments'] = [] - -# Write back -with open('tests/testspec.yml', 'w') as f: - yaml.dump(tests, f, default_flow_style=False, allow_unicode=True, sort_keys=False) - -print("Added comments field to all tests") diff --git a/tmp_add_comments_final.py b/tmp_add_comments_final.py deleted file mode 100644 index 653a432..0000000 --- a/tmp_add_comments_final.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 - -with open('tests/testspec.yml', 'r') as f: - lines = f.readlines() - -output = [] -i = 0 -while i < len(lines): - line = lines[i] - output.append(line) - - # Check if this line has invalid_reason at any indentation - if 'invalid_reason:' in line and line.strip().startswith('invalid_reason:'): - # Determine indentation level - indent = len(line) - len(line.lstrip()) - # Add comments: [] at the same indentation - output.append(' ' * indent + 'comments: []\n') - - i += 1 - -with open('tests/testspec.yml', 'w') as f: - f.writelines(output) - -print("Added comments field to all tests") diff --git a/tmp_check24.php b/tmp_check24.php deleted file mode 100644 index f3f0d06..0000000 --- a/tmp_check24.php +++ /dev/null @@ -1,22 +0,0 @@ -parse($test['emails'], $test['multiple']); - -echo "Email has comment: 't(comment with spaces !!!)name@[10.0.10.45]'\n\n"; - -echo "First email expected comments:\n"; -var_dump($test['result']['email_addresses'][0]['comments']); - -echo "\nFirst email actual comments:\n"; -var_dump($actual['email_addresses'][0]['comments']); diff --git a/tmp_check_test18.php b/tmp_check_test18.php deleted file mode 100644 index 30d14fe..0000000 --- a/tmp_check_test18.php +++ /dev/null @@ -1,17 +0,0 @@ - (comment) tn(comment1)ame@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com'; -$result = $parser->parse($email, false); // multiple = false - -echo "Result keys:\n"; -print_r(array_keys($result)); - -echo "\nResult:\n"; -print_r($result); diff --git a/tmp_debug_test18_full.php b/tmp_debug_test18_full.php deleted file mode 100644 index 2a84d71..0000000 --- a/tmp_debug_test18_full.php +++ /dev/null @@ -1,29 +0,0 @@ -parse($test['emails'], $test['multiple']); -$expected = $test['result']; - -echo "Expected comments:\n"; -var_dump($expected['comments']); - -echo "\nActual comments:\n"; -var_dump($actual['comments']); - -echo "\nEqual: " . ($expected['comments'] === $actual['comments'] ? 'YES' : 'NO') . "\n"; - -echo "\nExpected invalid:\n"; -var_dump($expected['invalid']); - -echo "\nActual invalid:\n"; -var_dump($actual['invalid']); diff --git a/tmp_find_fail.php b/tmp_find_fail.php deleted file mode 100644 index 4812f5d..0000000 --- a/tmp_find_fail.php +++ /dev/null @@ -1,57 +0,0 @@ - $test) { - $testNum = $idx + 1; - - $useWhitespaceAsSeparator = $test['use_whitespace_as_separator'] ?? true; - $separators = $test['separators'] ?? [',', ';']; - - $lengthLimits = null; - if (isset($test['use_relaxed_limits']) && $test['use_relaxed_limits']) { - $lengthLimits = LengthLimits::createRelaxed(); - } elseif (isset($test['max_local_part_length']) || isset($test['max_total_length']) || isset($test['max_domain_label_length'])) { - $lengthLimits = new LengthLimits( - $test['max_local_part_length'] ?? 64, - $test['max_total_length'] ?? 254, - $test['max_domain_label_length'] ?? 63 - ); - } - - $options = new ParseOptions(['%', '!'], $separators, $useWhitespaceAsSeparator, $lengthLimits); - $parser = new Parse(null, $options); - - $actual = $parser->parse($test['emails'], $test['multiple']); - $expected = $test['result']; - - if ($expected !== $actual) { - echo "Test #$testNum FAILED\n"; - echo "Input: '" . $test['emails'] . "'\n"; - - if (is_array($expected)) { - foreach ($expected as $key => $val) { - if (!isset($actual[$key])) { - echo "Missing key in actual: $key\n"; - break; - } elseif ($val !== $actual[$key]) { - echo "Difference in '$key':\n"; - echo " Expected: " . var_export($val, true) . "\n"; - echo " Actual: " . var_export($actual[$key], true) . "\n"; - break; - } - } - } - break; - } -} - -if (!isset($testNum) || $testNum == count($tests)) { - echo "All tests passed!\n"; -} diff --git a/tmp_fix_comment_tests.php b/tmp_fix_comment_tests.php deleted file mode 100644 index 6e9f487..0000000 --- a/tmp_fix_comment_tests.php +++ /dev/null @@ -1,40 +0,0 @@ - &$test) { - // Parse the email to get actual comments - $actual = $parser->parse($test['emails'], $test['multiple']); - - // Update expected comments to match actual - if ($test['multiple'] && isset($test['result']['email_addresses'])) { - foreach ($test['result']['email_addresses'] as $i => &$email) { - if (isset($actual['email_addresses'][$i])) { - if ($email['comments'] !== $actual['email_addresses'][$i]['comments']) { - $email['comments'] = $actual['email_addresses'][$i]['comments']; - $changed++; - } - } - } - } else { - if (isset($test['result']['comments']) && $test['result']['comments'] !== $actual['comments']) { - $test['result']['comments'] = $actual['comments']; - $changed++; - } - } -} - -// Write back -file_put_contents('tests/testspec.yml', \Symfony\Component\Yaml\Yaml::dump($tests, 10, 2, \Symfony\Component\Yaml\Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK)); - -echo "Updated $changed comment fields to match actual parser output\n"; diff --git a/tmp_test_comments.php b/tmp_test_comments.php deleted file mode 100644 index 1251c85..0000000 --- a/tmp_test_comments.php +++ /dev/null @@ -1,26 +0,0 @@ -', - 'john@example.com (home address)', - 'test(comment1)(comment2)@example.com', - 'test@example.com (comment with (nested) parens)' -]; - -foreach ($tests as $email) { - echo "Testing: $email\n"; - $result = $parser->parse($email, false); - echo " Address: " . $result['address'] . "\n"; - echo " Comments: " . json_encode($result['comments']) . "\n"; - echo " Invalid: " . ($result['invalid'] ? 'true' : 'false') . "\n"; - echo "\n"; -} From 9f649ea90085d5686a6c15dc1c7820e6809d1a82 Mon Sep 17 00:00:00 2001 From: Matthew J Mucklo Date: Sat, 7 Feb 2026 20:14:09 -0800 Subject: [PATCH 3/3] change to [] for comments --- tests/testspec.yml | 254 ++++++++++++++++++++++----------------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/tests/testspec.yml b/tests/testspec.yml index 2bad199..bb5c463 100644 --- a/tests/testspec.yml +++ b/tests/testspec.yml @@ -18,7 +18,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: tname@asdf.ghjkl.com multiple: false @@ -35,7 +35,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Testing Name ' multiple: false @@ -52,7 +52,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Testing D Name ' multiple: false @@ -69,7 +69,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Testing D. Name ' multiple: false @@ -86,7 +86,7 @@ ip: '' invalid: true invalid_reason: 'Periods within the display name of an email address must appear in quotes, such as "John Q. Public" according to RFC 5322' - comments: { } + comments: [] - emails: 'test.testing@asdf.ghjkl.com test.testing2@asdf.ghjkl.com' multiple: true @@ -107,7 +107,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test.testing2@asdf.ghjkl.com simple_address: test.testing2@asdf.ghjkl.com @@ -121,7 +121,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Testing D. Name" ' multiple: false @@ -138,7 +138,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '' multiple: false @@ -155,7 +155,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '<.tname@asdf.ghjkl.com>' multiple: false @@ -172,7 +172,7 @@ ip: '' invalid: true invalid_reason: "Email address can not start with '.'" - comments: { } + comments: [] - emails: '"test .s set .set"@asdf.ghjkl.com' multiple: false @@ -189,7 +189,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '' multiple: false @@ -206,7 +206,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '' multiple: false @@ -223,7 +223,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' multiple: true @@ -244,7 +244,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com @@ -258,7 +258,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname-test1@asdf.ghjkl.com simple_address: tname-test1@asdf.ghjkl.com @@ -272,7 +272,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'tname@asdf.ghjkl.com, tname@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com' multiple: false @@ -289,7 +289,7 @@ ip: '' invalid: true invalid_reason: 'Separator not permitted - only one email address allowed' - comments: { } + comments: [] - emails: "tnam e@asdf.g asdfa hjkl.com, tn'''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com" multiple: true @@ -310,7 +310,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: '' simple_address: '' @@ -324,7 +324,7 @@ ip: '' invalid: true invalid_reason: 'Misplaced separator or missing "@" symbol' - comments: { } + comments: [] - address: "tn'''ame@asdf.ghjkl.com" simple_address: "tn'''ame@asdf.ghjkl.com" @@ -338,7 +338,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname-test1@asdf.ghjkl.com simple_address: tname-test1@asdf.ghjkl.com @@ -352,7 +352,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: "tnam e@asdf.g asdfa hjkl.com, tn'''ame@asdf.ghjkl.com, tname-test1@asdf.ghjkl.com" multiple: false @@ -369,7 +369,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Testing D Name tname@asdf.ghjkl.com tname-test1@asdf.ghjkl.com' multiple: false @@ -386,7 +386,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Testing D Name (comment) tn(comment1)ame@asdf.gh(comment2)jkl.com tname-test1(comment3)@asdf.ghjkl.com' multiple: false @@ -421,7 +421,7 @@ ip: '' invalid: true invalid_reason: "This character is not allowed in email addresses submitted (please put in quotes if needed): '!'" - comments: { } + comments: [] - emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: true @@ -442,7 +442,7 @@ ip: 10.0.10.45 invalid: true invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com @@ -456,7 +456,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname-test2@asdf.ghjkl.com simple_address: tname-test2@asdf.ghjkl.com @@ -470,7 +470,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'tname@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: false @@ -487,7 +487,7 @@ ip: 10.0.10.45 invalid: true invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: true @@ -508,7 +508,7 @@ ip: 10.0.10.45 invalid: true invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - address: tname@asdf.ghjkl.com simple_address: tname@asdf.ghjkl.com @@ -522,7 +522,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname-test2@asdf.ghjkl.com simple_address: tname-test2@asdf.ghjkl.com @@ -536,7 +536,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 't"na"me@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: false @@ -553,7 +553,7 @@ ip: 10.0.10.45 invalid: true invalid_reason: "IP address invalid: '10.0.10.45' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: true @@ -589,7 +589,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: tname-test2@asdf.ghjkl.com simple_address: tname-test2@asdf.ghjkl.com @@ -603,7 +603,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 't(comment with spaces !!!)name@[10.0.10.45] tname@asdf.ghjkl.com, tname-test2@asdf.ghjkl.com' multiple: false @@ -638,7 +638,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: testing@xn--tdali-d8a8w.lv multiple: false @@ -655,7 +655,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: testing@-bad-domain.com multiple: false @@ -672,7 +672,7 @@ ip: '' invalid: true invalid_reason: "Domain invalid: Parts of the domain name '-bad-domain.com' can not start or end with '-'. This part does: -bad-domain" - comments: { } + comments: [] - emails: testing@192.168.0.1 multiple: false @@ -689,7 +689,7 @@ ip: 192.168.0.1 invalid: true invalid_reason: "IP address invalid: '192.168.0.1' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: testing@256.26.52.5 multiple: false @@ -706,7 +706,7 @@ ip: 256.26.52.5 invalid: true invalid_reason: "IP address invalid: '256.26.52.5' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: 'testing@[256.26.52.5]' multiple: false @@ -723,7 +723,7 @@ ip: 256.26.52.5 invalid: true invalid_reason: "IP address invalid: '256.26.52.5' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: 'testing@[299.236.532.265]' multiple: false @@ -740,7 +740,7 @@ ip: 299.236.532.265 invalid: true invalid_reason: "IP address invalid: '299.236.532.265' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: 'testing@[80.67.66.65]' multiple: false @@ -757,7 +757,7 @@ ip: 80.67.66.65 invalid: false invalid_reason: null - comments: { } + comments: [] - emails: testing@80.67.66.65 multiple: false @@ -774,7 +774,7 @@ ip: 80.67.66.65 invalid: false invalid_reason: null - comments: { } + comments: [] - emails: testing_underscore@somedomain.com multiple: false @@ -791,7 +791,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Supports (E-mail)" ' multiple: false @@ -808,7 +808,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Étienne Cloître ' multiple: false @@ -825,7 +825,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Étienne Cloître <é.cloître@domain.tld>' multiple: false @@ -842,7 +842,7 @@ ip: '' invalid: true invalid_reason: "Invalid character found in email address (please put in quotes if needed): 'é'" - comments: { } + comments: [] - emails: é.cloître@domain.tld multiple: false @@ -859,7 +859,7 @@ ip: '' invalid: true invalid_reason: "Invalid character found in email address local part: 'î'" - comments: { } + comments: [] - emails: bob@i18ène.fr multiple: false @@ -876,7 +876,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: "I'm Bobé " multiple: false @@ -893,7 +893,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'testing@[IPv6:2001:4860:4860::8888]' multiple: false @@ -910,7 +910,7 @@ ip: 'IPv6:2001:4860:4860::8888' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'testing@[IPv6:fe80::1]' multiple: false @@ -927,7 +927,7 @@ ip: 'IPv6:fe80::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:fe80::1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::1]' multiple: false @@ -944,7 +944,7 @@ ip: 'IPv6:::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:fc00::1]' multiple: false @@ -961,7 +961,7 @@ ip: 'IPv6:fc00::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:fc00::1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:2606:4700:4700::1111]' multiple: false @@ -978,7 +978,7 @@ ip: 'IPv6:2606:4700:4700::1111' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:192.0.2.1]' multiple: false @@ -995,7 +995,7 @@ ip: 'IPv6:::ffff:192.0.2.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[172.16.0.1]' multiple: false @@ -1012,7 +1012,7 @@ ip: 172.16.0.1 invalid: true invalid_reason: "IP address invalid: '172.16.0.1' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'testing@[127.0.0.1]' multiple: false @@ -1029,7 +1029,7 @@ ip: 127.0.0.1 invalid: true invalid_reason: "IP address invalid: '127.0.0.1' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:gggg::1]' multiple: false @@ -1046,7 +1046,7 @@ ip: 'IPv6:gggg::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:gggg::1' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: 'testing@[IPv6:2001:4860:4860::8888::1]' multiple: false @@ -1063,7 +1063,7 @@ ip: 'IPv6:2001:4860:4860::8888::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:2001:4860:4860::8888::1' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' multiple: true @@ -1084,7 +1084,7 @@ ip: 'IPv6:2001:4860:4860::8888' invalid: false invalid_reason: null - comments: { } + comments: [] - address: admin@example.com simple_address: admin@example.com @@ -1098,7 +1098,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'testing@[IPv6:2001:4860:4860::8888], admin@example.com' multiple: false @@ -1115,7 +1115,7 @@ ip: 'IPv6:2001:4860:4860::8888' invalid: true invalid_reason: 'Separator not permitted - only one email address allowed' - comments: { } + comments: [] - emails: 'testing@[0.0.0.0]' multiple: false @@ -1132,7 +1132,7 @@ ip: 0.0.0.0 invalid: true invalid_reason: "IP address invalid: '0.0.0.0' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'testing@[255.255.255.255]' multiple: false @@ -1149,7 +1149,7 @@ ip: 255.255.255.255 invalid: true invalid_reason: "IP address invalid: '255.255.255.255' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'Example | Example ' multiple: false @@ -1166,7 +1166,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'John / Jane Doe ' multiple: false @@ -1183,7 +1183,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"John Doe ' multiple: false @@ -1200,7 +1200,7 @@ ip: '' invalid: true invalid_reason: "No ending quote: '\"'" - comments: { } + comments: [] - emails: '"John Doe" ' multiple: false @@ -1217,7 +1217,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Test.User" ' multiple: false @@ -1234,7 +1234,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Valid Name" ' multiple: false @@ -1251,7 +1251,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: test@192.168.1.1 multiple: false @@ -1268,7 +1268,7 @@ ip: 192.168.1.1 invalid: true invalid_reason: "IP address invalid: '192.168.1.1' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'test@[IPv6:2001:db8::1]' multiple: false @@ -1285,7 +1285,7 @@ ip: 'IPv6:2001:db8::1' invalid: true invalid_reason: "IP address invalid: 'IPv6:2001:db8::1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: test@256.256.256.256 multiple: false @@ -1302,7 +1302,7 @@ ip: 256.256.256.256 invalid: true invalid_reason: "IP address invalid: '256.256.256.256' does not appear to be a valid IP address" - comments: { } + comments: [] - emails: test@10.0.0.1 multiple: false @@ -1319,7 +1319,7 @@ ip: 10.0.0.1 invalid: true invalid_reason: "IP address invalid: '10.0.0.1' does not appear to be a valid IP address in the global range" - comments: { } + comments: [] - emails: 'user1@[80.67.66.65], user2@example.com' multiple: true @@ -1340,7 +1340,7 @@ ip: 80.67.66.65 invalid: false invalid_reason: null - comments: { } + comments: [] - address: user2@example.com simple_address: user2@example.com @@ -1354,7 +1354,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"user.name"@example.com' multiple: false @@ -1371,7 +1371,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '' multiple: false @@ -1388,7 +1388,7 @@ ip: '' invalid: true invalid_reason: 'No email address found' - comments: { } + comments: [] - emails: ' ' multiple: false @@ -1405,7 +1405,7 @@ ip: '' invalid: true invalid_reason: 'No email address found' - comments: { } + comments: [] - emails: test@example.com multiple: false @@ -1422,7 +1422,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:192.0.0.1]' multiple: true @@ -1443,7 +1443,7 @@ ip: 'IPv6:::ffff:192.0.0.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.0.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:192.0.0.1]' multiple: false @@ -1460,7 +1460,7 @@ ip: 'IPv6:::ffff:192.0.0.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.0.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:192.0.2.100]' multiple: true @@ -1481,7 +1481,7 @@ ip: 'IPv6:::ffff:192.0.2.100' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.100' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:192.0.2.100]' multiple: false @@ -1498,7 +1498,7 @@ ip: 'IPv6:::ffff:192.0.2.100' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:192.0.2.100' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:198.51.100.1]' multiple: true @@ -1519,7 +1519,7 @@ ip: 'IPv6:::ffff:198.51.100.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:198.51.100.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:198.51.100.1]' multiple: false @@ -1536,7 +1536,7 @@ ip: 'IPv6:::ffff:198.51.100.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:198.51.100.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:203.0.113.1]' multiple: true @@ -1557,7 +1557,7 @@ ip: 'IPv6:::ffff:203.0.113.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:203.0.113.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: 'testing@[IPv6:::ffff:203.0.113.1]' multiple: false @@ -1574,7 +1574,7 @@ ip: 'IPv6:::ffff:203.0.113.1' invalid: true invalid_reason: "IP address invalid: 'IPv6:::ffff:203.0.113.1' does not appear to be a valid IPv6 address in the global range" - comments: { } + comments: [] - emails: test@server123.example.com multiple: false @@ -1591,7 +1591,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'test1@example.com test2@example.com' multiple: true @@ -1613,7 +1613,7 @@ ip: '' invalid: true invalid_reason: "Multiple at '@' symbols in email address" - comments: { } + comments: [] - emails: 'test1@example.com; test2@example.com' multiple: true @@ -1635,7 +1635,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test2@example.com simple_address: test2@example.com @@ -1649,7 +1649,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'John Doe , Jane Smith ' multiple: true @@ -1671,7 +1671,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: 'Jane Smith ' simple_address: jane@example.com @@ -1685,7 +1685,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'test1@example.com; test2@example.com; test3@example.org' multiple: true @@ -1706,7 +1706,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test2@example.com simple_address: test2@example.com @@ -1720,7 +1720,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test3@example.org simple_address: test3@example.org @@ -1734,7 +1734,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'John Doe ; Jane Smith ' multiple: true @@ -1755,7 +1755,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: 'Jane Smith ' simple_address: jane@example.com @@ -1769,7 +1769,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'test1@example.com, test2@example.com; test3@example.org' multiple: true @@ -1790,7 +1790,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test2@example.com simple_address: test2@example.com @@ -1804,7 +1804,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: test3@example.org simple_address: test3@example.org @@ -1818,7 +1818,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: john@example.com;jane@example.com multiple: true @@ -1842,7 +1842,7 @@ ip: '' invalid: true invalid_reason: "Invalid character found in domain of email address (please put in quotes if needed): ';'" - comments: { } + comments: [] - emails: 'john@example.com, jane@example.com' multiple: true @@ -1866,7 +1866,7 @@ ip: '' invalid: true invalid_reason: "Invalid character found in domain of email address (please put in quotes if needed): ','" - comments: { } + comments: [] - emails: 'john@example.com, jane@example.com' multiple: true @@ -1889,7 +1889,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: jane@example.com simple_address: jane@example.com @@ -1903,7 +1903,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'john@example.com; jane@example.com' multiple: true @@ -1926,7 +1926,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: jane@example.com simple_address: jane@example.com @@ -1940,7 +1940,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Smith, John" ' multiple: true @@ -1961,7 +1961,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: '"Smith, John" , "Doe, Jane" ' multiple: true @@ -1982,7 +1982,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - address: '"Doe, Jane" ' simple_address: jane@example.com @@ -1996,7 +1996,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: 'Smith, John ' multiple: true @@ -2017,7 +2017,7 @@ ip: '' invalid: true invalid_reason: 'Misplaced separator or missing "@" symbol' - comments: { } + comments: [] - address: 'John ' simple_address: john@example.com @@ -2031,7 +2031,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com multiple: false @@ -2048,7 +2048,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com multiple: false @@ -2065,7 +2065,7 @@ ip: '' invalid: true invalid_reason: "Email address before the '@' can not be greater than 64 octets per RFC 5321" - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com multiple: false @@ -2082,7 +2082,7 @@ ip: '' invalid: true invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' must be less than 63 octets" - comments: { } + comments: [] - emails: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com multiple: false @@ -2099,7 +2099,7 @@ ip: '' invalid: true invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' must be less than 63 octets" - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com multiple: false @@ -2117,7 +2117,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: test@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.example.com multiple: false @@ -2135,7 +2135,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: aaaaaaaaaaaa@example.com multiple: false @@ -2153,7 +2153,7 @@ ip: '' invalid: true invalid_reason: "Email address before the '@' can not be greater than 10 octets per RFC 5321" - comments: { } + comments: [] - emails: test@aaaaaaaaa.example.com multiple: false @@ -2171,7 +2171,7 @@ ip: '' invalid: true invalid_reason: "Domain invalid: Domain name part 'aaaaaaaaa' must be less than 8 octets" - comments: { } + comments: [] - emails: test@example.com multiple: false @@ -2189,7 +2189,7 @@ ip: '' invalid: true invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com multiple: false @@ -2207,7 +2207,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: test@example.com multiple: false @@ -2225,7 +2225,7 @@ ip: '' invalid: true invalid_reason: 'Email addresses can not be greater than 10 octets per RFC erratum 1690' - comments: { } + comments: [] - emails: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com multiple: false @@ -2243,7 +2243,7 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: [] - emails: john.smith(comment)@example.com multiple: false @@ -2369,4 +2369,4 @@ ip: '' invalid: false invalid_reason: null - comments: { } + comments: []