summaryrefslogtreecommitdiff
path: root/program/steps
diff options
context:
space:
mode:
Diffstat (limited to 'program/steps')
-rw-r--r--program/steps/mail/compose.inc15
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'];