From d2b8840a0e1c6877716517727ec9e1bbded20733 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 19 Nov 2010 03:45:19 -0500
Subject: [PATCH] - Fix handling of custom "_from" in sendmail (#1487132) - Small fix in displaying Sender input field

---
 program/steps/mail/compose.inc  |    9 ++--
 skins/default/mail.css          |    5 ++
 program/steps/mail/sendmail.inc |   61 +++++++++++++++++-------------
 3 files changed, 45 insertions(+), 30 deletions(-)

diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 3f2b8c5..ec9b4ef 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -472,7 +472,7 @@
       $from_id = get_input_value('_from', RCUBE_INPUT_POST);
     else if (!empty($_SESSION['compose']['param']['from']))
       $from_id = $_SESSION['compose']['param']['from'];
-    else if (count($user_identities) > 1) {
+    else {
       $return_path = $MESSAGE->headers->others['return-path'];
 
       // Set identity
@@ -501,10 +501,11 @@
     // add signatures to client
     $OUTPUT->set_env('signatures', $a_signatures);
   }
-  else
-  {
+  // no identities, display text input field
+  else {
+    $field_attrib['class'] = 'from_address';
     $input_from = new html_inputfield($field_attrib);
-    $out = $input_from->show($_POST['_from']);
+    $out = $input_from->show($from_id);
   }
 
   return $out;
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 81e5a21..54ded7a 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -212,7 +212,7 @@
 $mailbcc = rcmail_email_input_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset), true);
 
 if ($EMAIL_FORMAT_ERROR) {
-  $OUTPUT->show_message('emailformaterror', 'error', array('email' => $EMAIL_FORMAT_ERROR)); 
+  $OUTPUT->show_message('emailformaterror', 'error', array('email' => $EMAIL_FORMAT_ERROR));
   $OUTPUT->send('iframe');
 }
 
@@ -223,18 +223,30 @@
 else if (empty($mailto))
   $mailto = 'undisclosed-recipients:;';
 
-// get sender name and address
+// Get sender name and address...
 $from = get_input_value('_from', RCUBE_INPUT_POST, true, $message_charset);
-$identity_arr = rcmail_get_identity($from);
+// ... from identity...
+if (is_numeric($from)) {
+  if (is_array($identity_arr = rcmail_get_identity($from))) {
+    if ($identity_arr['mailto'])
+      $from = $identity_arr['mailto'];
+    if ($identity_arr['string'])
+      $from_string = $identity_arr['string'];
+  }
+  else {
+    $from = null;
+  }
+}
+// ... if there is no identity record, this might be a custom from
+else if ($from_string = rcmail_email_input_format($from)) {
+  if (preg_match('/(\S+@\S+)/', $from_string, $m))
+    $from = trim($m[1], '<>');
+  else
+    $from = null;
+}
 
-if (!$identity_arr && ($from = rcmail_email_input_format($from))) {
-  if (preg_match('/(\S+@\S+)/', $from, $m))
-    $identity_arr['mailto'] = $m[1];
-} else
-  $from = $identity_arr['mailto'];
-
-if (empty($identity_arr['string']))
-  $identity_arr['string'] = $from;
+if (!$from_string && $from)
+  $from_string = $from;
 
 // compose headers array
 $headers = array();
@@ -281,7 +293,7 @@
 }
 
 $headers['Date'] = rcmail_user_date();
-$headers['From'] = rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset);
+$headers['From'] = rcube_charset_convert($from_string, RCMAIL_CHARSET, $message_charset);
 $headers['To'] = $mailto;
 
 // additional recipients
@@ -331,19 +343,17 @@
 if (!empty($_SESSION['compose']['references']))
   $headers['References'] = $_SESSION['compose']['references'];
 
-if (!empty($_POST['_priority']))
-  {
+if (!empty($_POST['_priority'])) {
   $priority = intval($_POST['_priority']);
   $a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest');
   if ($str_priority = $a_priorities[$priority])
     $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority));
-  }
+}
 
-if (!empty($_POST['_receipt']))
-  {
-  $headers['Return-Receipt-To'] = $identity_arr['string'];
-  $headers['Disposition-Notification-To'] = $identity_arr['string'];
-  }
+if (!empty($_POST['_receipt'])) {
+  $headers['Return-Receipt-To'] = $from_string;
+  $headers['Disposition-Notification-To'] = $from_string;
+}
 
 // additional headers
 $headers['Message-ID'] = $message_id;
@@ -526,8 +536,7 @@
 $MAIL_MIME->setParam('text_charset', $message_charset . ($flowed ? ";\r\n format=flowed" : ''));
 
 // encoding subject header with mb_encode provides better results with asian characters
-if (function_exists('mb_encode_mimeheader'))
-{
+if (function_exists('mb_encode_mimeheader')) {
   mb_internal_encoding($message_charset);
   $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
     $message_charset, 'Q', "\r\n", 8);
@@ -537,13 +546,13 @@
 // pass headers to message object
 $MAIL_MIME->headers($headers);
 
-// Begin SMTP Delivery Block 
+// Begin SMTP Delivery Block
 if (!$savedraft)
 {
-  // check for 'From' address (identity may be incomplete)
-  if ($identity_arr && !$identity_arr['mailto']) {
+  // check 'From' address (identity may be incomplete)
+  if (empty($from)) {
     $OUTPUT->show_message('nofromaddress', 'error');
-    $OUTPUT->send('iframe'); 
+    $OUTPUT->send('iframe');
   }
 
   // Handle Delivery Status Notification request
diff --git a/skins/default/mail.css b/skins/default/mail.css
index d380eff..ead0aa6 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -1329,6 +1329,11 @@
   height: 32px;
 }
 
+input.from_address
+{
+  width: 80% !important;
+}
+
 #compose-cc,
 #compose-bcc,
 #compose-replyto,

--
Gitblit v1.9.1