diff options
author | Urban Müller | 2022-03-28 15:51:01 +0200 |
---|---|---|
committer | Urban Müller | 2022-03-28 15:51:01 +0200 |
commit | 8d79006992b064fef8fcb13a1b3fe28a6aad774b (patch) | |
tree | 50f407272d0771ab84c299f5529fc46079c9fb27 /it_mail.class | |
parent | abb15d8eb591c12d9d71320f4e2b0ce682cd860e (diff) | |
download | itools-8d79006992b064fef8fcb13a1b3fe28a6aad774b.tar.gz itools-8d79006992b064fef8fcb13a1b3fe28a6aad774b.tar.bz2 itools-8d79006992b064fef8fcb13a1b3fe28a6aad774b.zip |
user filter_var instead of regex (thx chrigi), correctly ignore display names
Diffstat (limited to 'it_mail.class')
-rw-r--r-- | it_mail.class | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/it_mail.class b/it_mail.class index 0705c15..eb2cbb9 100644 --- a/it_mail.class +++ b/it_mail.class @@ -56,8 +56,6 @@ class it_mail var $flags = ""; var $charset; - static $addr_regex = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"; - /** * Construct a new email message. Headers and body can be added later. * Note: Headers To, Cc, Bcc can be arrays @@ -408,20 +406,22 @@ static function send_smtp_cmd($fp, $cmd, &$answer, $timeoutok = false, $failcode /* Return errors found with email address, null otherwise */ -static function address_error($addresses) +static function address_error($addresslist) { - foreach (str_split($addresses) as $char) + foreach (str_split($addresslist) as $char) { - $quoted = $char == '"' ? !$quoted : $quoted; - if ($char == ',' && !$quoted) + if ($char == '"') + $quoted = !$quoted; + else if ($char == ',' && !$quoted) $n++; - else - $emails[$n] .= $char; + else if (!$quoted) + $addresses[$n] .= $char; } - foreach ($emails as $email) - if (!it::match(self::$addr_regex, $email) && !it::match('^\s*[a-z][-a-z0-9]*\s*$', $email)) - return "invalid format on $email"; + foreach ($addresses as $address) + if (($email = it::match('<([^>]*)', $address) ?? $address)) + if (filter_var($email, FILTER_VALIDATE_EMAIL) === false && !it::match('^\s*[a-z][-a-z0-9]*\s*$', $email)) + return "invalid format on $email"; } |