From 30cc01f89daea932d15a1a505d25b543913664ac Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 28 Nov 2012 14:21:09 -0500
Subject: [PATCH] Use Delivered-To header as a last resort for identity selection (#1488840)

---
 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 92ec88f..60662b3 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -298,7 +298,6 @@
   $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 @@
     $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 @@
     }
   }
 
+  // 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'];
 

--
Gitblit v1.9.1