diff options
author | Aleksander Machniak <alec@alec.pl> | 2012-11-28 20:21:09 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2012-11-28 20:21:09 +0100 |
commit | 30cc01f89daea932d15a1a505d25b543913664ac (patch) | |
tree | f01818f99232bd3b9a500ed2cbc7a9e187e6d99d /program/steps | |
parent | 511e1668e6f4a00818128e6b6c7dea0f75d33672 (diff) |
Use Delivered-To header as a last resort for identity selection (#1488840)
Diffstat (limited to 'program/steps')
-rw-r--r-- | program/steps/mail/compose.inc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 92ec88f1b..60662b382 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -298,7 +298,6 @@ else if (count($MESSAGE->identities)) { $from_idx = null; $found_idx = null; $default_identity = 0; // default identity is always first on the list - $return_path = $MESSAGE->headers->others['return-path']; // Select identity foreach ($MESSAGE->identities as $idx => $ident) { @@ -332,8 +331,8 @@ else if (count($MESSAGE->identities)) { $from_idx = $found_idx; } - // Fallback using Return-Path - if ($from_idx === null && $return_path) { + // Try Return-Path + if ($from_idx === null && ($return_path = $MESSAGE->headers->others['return-path'])) { foreach ($MESSAGE->identities as $idx => $ident) { if (strpos($return_path, str_replace('@', '=', $ident['email_ascii']).'@') !== false) { $from_idx = $idx; @@ -342,6 +341,16 @@ else if (count($MESSAGE->identities)) { } } + // Fallback using Delivered-To + if ($from_idx === null && ($delivered_to = $MESSAGE->headers->others['delivered-to'])) { + foreach ($MESSAGE->identities as $idx => $ident) { + if (in_array($ident['email_ascii'], $delivered_to)) { + $from_idx = $idx; + break; + } + } + } + $ident = $MESSAGE->identities[$from_idx !== null ? $from_idx : $default_identity]; $from_id = $ident['identity_id']; |