summaryrefslogtreecommitdiff
path: root/program/lib/Mail
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2011-08-09 09:46:54 +0000
committeralecpl <alec@alec.pl>2011-08-09 09:46:54 +0000
commit6d0ada30d7847a509db10d819020ac653597d073 (patch)
treec14e28bc4a0f0699cf4eecb87e55a80836097351 /program/lib/Mail
parentefc24a5fb3d5d70e9066b1994f3b41b248e59ccd (diff)
- Fix handling of email addresses with quoted local part (#1487939)
Diffstat (limited to 'program/lib/Mail')
-rw-r--r--program/lib/Mail/mimePart.php10
1 files changed, 7 insertions, 3 deletions
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php
index 60b3601e0..5674792b4 100644
--- a/program/lib/Mail/mimePart.php
+++ b/program/lib/Mail/mimePart.php
@@ -131,6 +131,7 @@ class Mail_mimePart
*/
var $_eol = "\r\n";
+
/**
* Constructor.
*
@@ -800,6 +801,9 @@ class Mail_mimePart
// Structured header (make sure addr-spec inside is not encoded)
if (!empty($separator)) {
+ // Simple e-mail address regexp
+ $email_regexp = '(\S+|("\s*(?:[^"\f\n\r\t\v\b\s]+\s*)+"))@\S+';
+
$parts = Mail_mimePart::_explodeQuotedString($separator, $value);
$value = '';
@@ -817,12 +821,12 @@ class Mail_mimePart
}
// let's find phrase (name) and/or addr-spec
- if (preg_match('/^<\S+@\S+>$/', $part)) {
+ if (preg_match('/^<' . $email_regexp . '>$/', $part)) {
$value .= $part;
- } else if (preg_match('/^\S+@\S+$/', $part)) {
+ } else if (preg_match('/^' . $email_regexp . '$/', $part)) {
// address without brackets and without name
$value .= $part;
- } else if (preg_match('/<*\S+@\S+>*$/', $part, $matches)) {
+ } else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) {
// address with name (handle name)
$address = $matches[0];
$word = str_replace($address, '', $part);