* Adds multiple identities ("From:" addresses)
authorfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Thu, 10 May 2001 19:16:03 +0000 (19:16 +0000)
committerfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Thu, 10 May 2001 19:16:03 +0000 (19:16 +0000)
* I honestly don't know why this was thought to be so hard.  I did it in
  a couple hours.
* ... and nobody in the Twin Cities (Minnesota) wants to hire me.  :-)

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1350 7612ce4b-ef26-0410-bec9-ea0150e637f0

ChangeLog
functions/smtp.php
src/addrbook_search_html.php
src/compose.php
src/options.php
src/options_identities.php [new file with mode: 0644]
src/options_personal.php

index 9768ea625e3a2f57c00e2d2e3d7ac79c0c2d75ff..0e9a9712c9c09d1d4d32d9c4c6d41e1893c6bad0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 Version 1.1.2 -- DEVELOPMENT
 ----------------------------
+- Support for multiple identities
 
 Version 1.1.1 -- April 30, 2001
 -------------------------------
index 493276a7eba706c7774f5a6a307f27c2432515aa..d531f1dc8f779571bff5ef004db9c230e42e7766 100644 (file)
                $info['remotefilename'] . "\"\r\n";
             $header .= "Content-Disposition: attachment; filename=\"" .
                $info['remotefilename'] . "\"\r\n";
-            $header .= "Content-Transfer-Encoding: base64\r\n\r\n";
-            fputs ($fp, $header);
-            $length += strlen($header);
             
             $file = fopen ($attachment_dir . $info['localfilename'], 'r');
-            while ($tmp = fread($file, 570)) {
-               $encoded = chunk_split(base64_encode($tmp));
-               $length += strlen($encoded);
-               fputs ($fp, $encoded);
-            }
+           if (substr($filetype, 0, 5) == 'text/' ||
+               $filetype == 'message/rfc822') {
+              $header .= "\r\n";
+               fputs ($fp, $header);
+               $length += strlen($header);
+              while ($tmp = fgets($file, 4096)) {
+                 $tmp = str_replace("\r\n", "\n", $tmp);
+                 $tmp = str_replace("\r", "\n", $tmp);
+                 $tmp = str_replace("\n", "\r\n", $tmp);
+                 fputs($fp, $tmp);
+                 $length += strlen($tmp);
+              }
+           } else {
+               $header .= "Content-Transfer-Encoding: base64\r\n\r\n";
+               fputs ($fp, $header);
+               $length += strlen($header);
+               while ($tmp = fread($file, 570)) {
+                  $encoded = chunk_split(base64_encode($tmp));
+                  $length += strlen($encoded);
+                  fputs ($fp, $encoded);
+               }
+           }
             fclose ($file);
          }
       }
       global $REMOTE_ADDR, $SERVER_NAME, $REMOTE_PORT;
       global $data_dir, $username, $popuser, $domain, $version, $useSendmail;
       global $default_charset, $HTTP_VIA, $HTTP_X_FORWARDED_FOR;
-      global $REMOTE_HOST;
+      global $REMOTE_HOST, $identity;
 
       // Storing the header to make sure the header is the same
       // everytime the header is printed.
          $to = expandAddrs(parseAddrs($t));
          $cc = expandAddrs(parseAddrs($c));
          $bcc = expandAddrs(parseAddrs($b));
-         $reply_to = getPref($data_dir, $username, 'reply_to');
-         $from = getPref($data_dir, $username, 'full_name');
-         $from_addr = getPref($data_dir, $username, 'email_address');
+        if (isset($identity) && $identity != 'default')
+        {
+           $reply_to = getPref($data_dir, $username, 'reply_to' . $identity);
+           $from = getPref($data_dir, $username, 'full_name' . $identity);
+           $from_addr = getPref($data_dir, $username, 'email_address' . $identity);
+        }
+        else
+        {
+            $reply_to = getPref($data_dir, $username, 'reply_to');
+            $from = getPref($data_dir, $username, 'full_name');
+            $from_addr = getPref($data_dir, $username, 'email_address');
+        }
 
          if ($from_addr == '')
             $from_addr = $popuser.'@'.$domain;
 
    function sendSMTP($t, $c, $b, $subject, $body, $more_headers) {
       global $username, $popuser, $domain, $version, $smtpServerAddress, $smtpPort,
-         $data_dir, $color, $use_authenticated_smtp;
+         $data_dir, $color, $use_authenticated_smtp, $identity;
 
       $to = expandAddrs(parseAddrs($t));
       $cc = expandAddrs(parseAddrs($c));
       $bcc = expandAddrs(parseAddrs($b));
-      $from_addr = getPref($data_dir, $username, 'email_address');
+      if (isset($identity) && $identity != 'default')
+        $from_addr = getPref($data_dir, $username, 'email_address' . $identity);
+      else
+         $from_addr = getPref($data_dir, $username, 'email_address');
 
       if (!$from_addr)
          $from_addr = "$popuser@$domain";
index 9ee5a53f6695fb854b6fe2dbfcec3001798e25f9..87f1af216e66d29a0e18c4abf2714810d7b5b899 100644 (file)
@@ -41,6 +41,8 @@
           . '" name=send_to_cc>' . "\n";
       echo "<input type=hidden value=\"" . htmlspecialchars($send_to_bcc)
           . '" name=send_to_bcc>' . "\n";
+      echo "<input type=hidden value=\"" . htmlspecialchars($identity)
+          . '" name=identity>' . "\n";
       echo "<input type=hidden name=mailbox value=\"" .
           htmlspecialchars($mailbox) . "\">\n";
       echo "<input type=hidden value=\"true\" name=from_htmladdr_search>\n";
index 674c7af3a7e2e0bf2791b4bfae0e5872dc49e0c6..6a12f0cbcbe15eb7df50040940fce4586c889598 100644 (file)
          $passed_body, $color, $use_signature, $signature, $prefix_sig, 
          $editor_size, $attachments, $subject, $newmail, 
          $use_javascript_addr_book, $send_to_bcc, $reply_id, $mailbox, 
-         $from_htmladdr_search, $location_of_buttons, $attachment_dir;
+         $from_htmladdr_search, $location_of_buttons, $attachment_dir,
+        $username, $data_dir, $identity;
 
       $subject = decodeHeader($subject);
       $reply_subj = decodeHeader($reply_subj);
 
       if ($location_of_buttons == 'top') showComposeButtonRow();
 
+      $idents = getPref($data_dir, $username, 'identities');
+      if ($idents != '' && $idents > 1)
+      {
+         echo "   <TR>\n";
+         echo "      <TD BGCOLOR=\"$color[4]\" ALIGN=RIGHT>\n";
+         echo _("From:");
+         echo "      </TD><TD BGCOLOR=\"$color[4]\">\n";
+        echo "<select name=identity>\n";
+        echo "<option value=default>" . 
+           htmlspecialchars(getPref($data_dir, $username, 'full_name'));
+        $em = getPref($data_dir, $username, 'email_address');
+        if ($em != '')
+           echo htmlspecialchars(' <' . $em . '>') . "\n";
+        for ($i = 1; $i < $idents; $i ++) {
+           echo '<option value="' . $i . '"';
+           if (isset($identity) && $identity == $i)
+              echo ' SELECTED';
+           echo '>';
+           echo htmlspecialchars(getPref($data_dir, $username, 'full_name' . 
+                                         $i));
+           $em = getPref($data_dir, $username, 'email_address' . $i);
+           if ($em != '')
+              echo htmlspecialchars(' <' . $em . '>') . "\n";
+        }
+        echo "</select>\n";
+         echo "      </TD>\n";
+         echo "   </TR>\n";
+      }
       echo "   <TR>\n";
       echo "      <TD BGCOLOR=\"$color[4]\" ALIGN=RIGHT>\n";
       echo _("To:");
index db4a47258e1efa902d6c06c7cf22336928ec166f..f78d285b1418ac032120b8f3f8025f05d6ed01e4 100644 (file)
 <?php
    if (isset($submit_personal)) {
       # Save personal information
-      if (isset($full_name)) setPref($data_dir, $username, 'full_name', $full_name);
-      if (isset($email_address)) setPref($data_dir, $username, 'email_address', $email_address);
-      if (isset($reply_to)) setPref($data_dir, $username, 'reply_to', $reply_to);
+      if (isset($full_name)) 
+         setPref($data_dir, $username, 'full_name', $full_name);
+      if (isset($email_address)) 
+         setPref($data_dir, $username, 'email_address', $email_address);
+      if (isset($reply_to)) 
+         setPref($data_dir, $username, 'reply_to', $reply_to);
       if (! isset($usesignature))
          $usesignature = 0;
       setPref($data_dir, $username, 'use_signature', $usesignature);  
diff --git a/src/options_identities.php b/src/options_identities.php
new file mode 100644 (file)
index 0000000..61fb481
--- /dev/null
@@ -0,0 +1,319 @@
+<?php
+   /**
+    **  options_identities.php
+    **
+    **  $Id$
+    **/
+
+   include('../src/validate.php');
+   include('../functions/page_header.php');
+   include('../functions/display_messages.php');
+   include('../src/load_prefs.php');
+
+   if (isset($return)) {
+      SaveUpdateFunction();
+      header('Location: options_personal.php');
+      exit();
+   }
+   
+   displayPageHeader($color, 'None');
+
+   if (CheckAndDoDefault() || CheckAndDoPromote()) {
+      SaveUpdateFunction();
+   }
+   if (isset($update))
+      SaveUpdateFunction();
+
+   LoadInfo($full_name, $email_address, $reply_to, '');
+
+?>
+<br>
+<table width=95% align=center border=0 cellpadding=2 cellspacing=0>
+  <tr>
+    <th bgcolor="<?php echo $color[0] ?>" align=center>
+      <?php echo _("Options") . " - " . _("Advanced Identities"); ?>
+    </th>
+  </tr>
+</table>
+
+<form name=f action="options_identities.php" method=post>
+<p align=center><input type=submit name=return value="<?PHP
+echo _("Save and return to the Personal Options"); ?>"><br><?PHP
+$num = getPref($data_dir, $username, 'identities');
+echo htmlspecialchars($num) . ' ';
+if ($num > 1)
+   echo _("Identities Defined");
+else
+   echo _("Identity Defined");
+?></p>
+<table width=100% cellpadding=0 cellspacing=2 border=0>
+  <tr bgcolor="<?PHP echo $color[9] ?>">
+    <th colspan=2 align=center><?PHP echo _("Default Identity") ?></th>
+  </tr>
+<?PHP
+
+   ShowTableInfo($full_name, $email_address, $reply_to, '');
+  
+   $num = 1;
+   while (LoadInfo($full_name, $email_address, $reply_to, $num))
+   {
+?>
+  <tr bgcolor="<?PHP echo $color[9] ?>">
+    <th colspan=2 align=center><?PHP printf (_("Alternate Identity %d"),
+    $num) ?></th>
+  </tr>
+<?PHP
+       ShowTableInfo($full_name, $email_address, $reply_to, $num);
+       $num ++;
+   }
+   
+?>
+  <tr bgcolor="<?PHP echo $color[9] ?>">
+    <th colspan=2 align=center><?PHP echo _("Add a New Identity") ?></th>
+  </tr>
+<?
+
+   ShowTableInfo('', '', '', $num);
+?>
+</table>   
+</form>
+</body></html>
+<?PHP
+
+function SaveUpdateFunction()
+{
+   global $username, $data_dir, $full_name, $email_address, $reply_to;
+    
+   $i = 1;
+   $fakeI = 1;
+   $name = 'form_for_' . $i;
+   global $$name;
+   while (isset($$name))
+   {
+      $name = 'delete_' . $i;
+      global $$name;
+      if (isset($$name)) {
+         $fakeI --;
+      } else {
+         $filled = 0;
+        
+         $name = 'full_name' . $i;
+         global $$name;
+        if ($$name != '') 
+           $filled ++;
+         setPref($data_dir, $username, 'full_name' . $fakeI, $$name);
+        
+         $name = 'email_address' . $i;
+         global $$name;
+        if ($$name != '') 
+           $filled ++;
+         setPref($data_dir, $username, 'email_address' . $fakeI, $$name);
+        
+         $name = 'reply_to' . $i;
+         global $$name;
+        if ($$name != '') 
+           $filled ++;
+         setPref($data_dir, $username, 'reply_to' . $fakeI, $$name);
+        
+        if ($filled == 0) 
+           $fakeI --;
+      }
+      
+      $fakeI ++;
+      $i ++;
+      $name = 'form_for_' . $i;
+      global $$name;
+   }
+   
+   setPref($data_dir, $username, 'identities', $fakeI);
+   
+   while ($fakeI != $i)
+   {
+      removePref($data_dir, $username, 'full_name' . $fakeI);
+      removePref($data_dir, $username, 'email_address' . $fakeI);
+      removePref($data_dir, $username, 'reply_to' . $fakeI);
+      $fakeI ++;
+   }
+
+   setPref($data_dir, $username, 'full_name', $full_name);
+   setPref($data_dir, $username, 'email_address', $email_address);
+   setPref($data_dir, $username, 'reply_to', $reply_to);
+}
+
+function CheckAndDoDefault()
+{
+   global $username, $data_dir, $full_name, $email_address, $reply_to;
+    
+   $i = 1;
+   $name = 'form_for_' . $i;
+   global $$name;
+   while (isset($$name))
+   {
+      $name = 'make_default_' . $i;
+      global $$name;
+      if (isset($$name)) {
+          global $full_name, $email_address, $reply_to;
+         
+         $name = 'full_name' . $i;
+         global $$name;
+         $temp = $full_name;
+         $full_name = $$name;
+         $$name = $temp;
+         
+         $name = 'email_address' . $i;
+         global $$name;
+         $temp = $email_address;
+         $email_address = $$name;
+         $$name = $temp;
+         
+         $name = 'reply_to' . $i;
+         global $$name;
+         $temp = $reply_to;
+         $reply_to = $$name;
+         $$name = $temp;
+         
+         return true;
+      }
+      
+      $i ++;
+      $name = 'form_for_' . $i;
+      global $$name;
+   }
+   return false;
+}
+
+function CheckAndDoPromote()
+{
+   global $username, $data_dir, $full_name, $email_address, $reply_to;
+    
+   $i = 1;
+   $name = 'form_for_' . $i;
+   global $$name;
+   while (isset($$name))
+   {
+      $name = 'promote_' . $i;
+      global $$name;
+      if (isset($$name) && $i > 1) {
+         $nameA = 'full_name' . $i;
+         $nameB = 'full_name' . ($i - 1);
+         global $$nameA, $$nameB;
+         $temp = $$nameA;
+         $$nameA = $$nameB;
+         $$nameB = $temp;
+         
+         $nameA = 'email_address' . $i;
+         $nameB = 'email_address' . ($i - 1);
+         global $$nameA, $$nameB;
+         $temp = $$nameA;
+         $$nameA = $$nameB;
+         $$nameB = $temp;
+         
+         $nameA = 'email_address' . $i;
+         $nameB = 'email_address' . ($i - 1);
+         global $$nameA, $$nameB;
+         $temp = $$nameA;
+         $$nameA = $$nameB;
+         $$nameB = $temp;
+         
+         return true;
+      }
+
+      $i ++;
+      $name = 'form_for_' . $i;
+      global $$name;
+   }
+   return false;
+}
+
+function LoadInfo(&$n, &$e, &$r, $post)
+{
+   global $username, $data_dir;
+
+   $n = getPref($data_dir, $username, 'full_name' . $post);
+   $e = getPref($data_dir, $username, 'email_address' . $post);
+   $r = getPref($data_dir, $username, 'reply_to' . $post);
+
+   if ($n != '' || $e != '' || $r != '')
+      return true;
+}
+
+function ShowTableInfo($full_name, $email_address, $reply_to, $post)
+{
+   global $color;
+   
+   $OtherBG = '';
+   
+   if ($post == '')
+      $OtherBG = ' bgcolor="' . $color[10] . '"';
+
+   if ($full_name == '' && $email_address == '' && $reply_to == '')
+      $isEmptySection = true;
+   else
+      $isEmptySection = false;
+
+?>
+  <tr<?PHP echo $OtherBG ?>>
+    <td align=right nowrap>
+      <?php echo _("Full Name"); ?>:
+    </td>
+    <td>
+      <input size=50 type=text value="<?php echo htmlspecialchars($full_name)
+      ?>" name="full_name<?PHP echo $post ?>"> 
+    </td>
+  </tr>
+  <tr<?PHP echo $OtherBG ?>>
+    <td align=right nowrap>
+      <?php echo _("E-Mail Address"); ?>:
+    </td>
+    <td>
+      <input size=50 type=text value="<?php echo htmlspecialchars($email_address)
+      ?>" name="email_address<?PHP echo $post ?>"> 
+    </td>
+  </tr>
+  <tr<?PHP echo $OtherBG ?>>
+    <td align=right nowrap>
+      <?php echo _("Reply To"); ?>:
+    </td>
+    <td>
+      <input size=50 type=text value="<?php echo htmlspecialchars($reply_to)
+      ?>" name="reply_to<?PHP echo $post ?>"> 
+    </td>
+  </tr>
+<?PHP
+   if (! $isEmptySection && $post != '') {
+?>
+  <tr>
+    <td align=right>
+      <?PHP echo _("Delete") ?>:
+    </td>
+    <td>
+      <input type=checkbox name="delete_<?PHP echo $post ?>"> <?PHP
+      echo _("Delete this identity"); ?>
+    </td>
+  </tr>
+<?PHP
+   }
+?>
+  <tr>
+    <td colspan=2 align=center>
+      <input type=hidden name="form_for_<?PHP echo $post ?>" value="1">
+      <input type=submit name="update" value="<?PHP
+         echo _("Save / Update") ?>">
+<?PHP 
+   if (! $isEmptySection && $post != '') {
+?>
+      <input type=submit name="make_default_<?PHP echo $post ?>" value="<?PHP
+         echo _("Make Default") ?>">
+<?PHP
+   }
+   if (! $isEmptySection && $post != '' && $post > 1) {
+?>
+      <input type=submit name="promote_<?PHP echo $post ?>" value="<?PHP
+         echo _("Move Up") ?>">
+<?PHP
+   }
+?>
+    </td>
+  </tr>
+<?PHP
+}
index 784dd757a780e7906d95fdf056ed56e822504730..170f625a09b3d36a7c25ebd5d4fa23f8f1aa1c03 100644 (file)
                <input size=50 type=text value="<?php echo $replyto ?>" name=reply_to> 
             </td>
          </tr>
+        <tr>
+           <td align=right nowrap><?PHP echo _("Multiple Identities"); ?>:
+           </td><td>
+              <a href="options_identities.php">Edit Advanced Identities</a>
+               (discards changes made on this form so far)
+           </td>
+        </tr>
+         <tr><td colspan=2><hr size=1 width=80%></td></tr>
          <tr>
             <td align=right nowrap valign=top><br><?php echo _("Signature"); ?>:
             </td><td>