Przeglądaj źródła

added authenticated smtp server support

Luke Ehresman 24 lat temu
rodzic
commit
e7d68b547d
4 zmienionych plików z 76 dodań i 27 usunięć
  1. 5 2
      ChangeLog
  2. 44 19
      config/conf.pl
  3. 2 0
      functions/imap_mailbox.php
  4. 25 6
      functions/smtp.php

+ 5 - 2
ChangeLog

@@ -1,9 +1,12 @@
 Version 1.1.0 -- DEVELOPMENT
 Version 1.1.0 -- DEVELOPMENT
 ----------------------------
 ----------------------------
+- Added ability to read HTML messages by default instead of plain text (Display Options)
+- Added authenticated SMTP server support (configure in conf.pl)
+- Rewrote attachment handling code in compose.php
 - If aliases are typed in To, Cc, or Bcc, they are automatically lookedup in
 - If aliases are typed in To, Cc, or Bcc, they are automatically lookedup in
   in the addressbook and converted to the associated addresses.
   in the addressbook and converted to the associated addresses.
-- Added collapseable folder listing (an option that can be turned on)
-- Added alternating row colors to improve interface
+- Added collapseable folder listing (an option that can be turned on in Folder Options)
+- Added alternating row colors to improve interface (Display Options)
 - Added Croatian translation by Albert Novak <anovak@pu.carnet.hr>
 - Added Croatian translation by Albert Novak <anovak@pu.carnet.hr>
 
 
 Version 1.0.5 -- DEVELOPMENT
 Version 1.0.5 -- DEVELOPMENT

+ 44 - 19
config/conf.pl

@@ -242,6 +242,9 @@ if (!$force_username_lowercase) {
 if (!$optional_delimiter) {
 if (!$optional_delimiter) {
 	$optional_delimiter = "detect";
 	$optional_delimiter = "detect";
 }
 }
+if (!$use_authenticated_smtp) {
+    $use_authenticated_smtp = "false";
+}
 
 
 #####################################################################################
 #####################################################################################
 if ($config_use_color == 1) {
 if ($config_use_color == 1) {
@@ -298,10 +301,11 @@ while (($command ne "q") && ($command ne "Q")) {
       } else {
       } else {
          print "6.    SMTP Server        : $WHT$smtpServerAddress$NRM\n";
          print "6.    SMTP Server        : $WHT$smtpServerAddress$NRM\n";
          print "7.    SMTP Port          : $WHT$smtpPort$NRM\n";
          print "7.    SMTP Port          : $WHT$smtpPort$NRM\n";
+         print "8.    Authenticated SMTP : $WHT$use_authenticated_smtp$NRM\n";
       }
       }
-      print "8.  Server               : $WHT$imap_server_type$NRM\n";
-      print "9.  Invert Time          : $WHT$invert_time$NRM\n";
-      print "10. Delimiter            : $WHT$optional_delimiter$NRM\n";
+      print "9.  Server               : $WHT$imap_server_type$NRM\n";
+      print "10. Invert Time          : $WHT$invert_time$NRM\n";
+      print "11. Delimiter            : $WHT$optional_delimiter$NRM\n";
       print "\n";
       print "\n";
       print "R   Return to Main Menu\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 3) {
    } elsif ($menu == 3) {
@@ -454,9 +458,10 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 5)  { $sendmail_path      = command15 (); }
          elsif ($command == 5)  { $sendmail_path      = command15 (); }
          elsif ($command == 6)  { $smtpServerAddress  = command16 (); }
          elsif ($command == 6)  { $smtpServerAddress  = command16 (); }
          elsif ($command == 7)  { $smtpPort           = command17 (); }
          elsif ($command == 7)  { $smtpPort           = command17 (); }
-         elsif ($command == 8)  { $imap_server_type   = command18 (); }
-         elsif ($command == 9)  { $invert_time        = command19 (); }
-         elsif ($command == 10) { $optional_delimiter = command110 (); }
+         elsif ($command == 8)  { $use_authenticated_smtp   = command18 (); }
+         elsif ($command == 9)  { $imap_server_type   = command19 (); }
+         elsif ($command == 10) { $invert_time        = command110 (); }
+         elsif ($command == 11) { $optional_delimiter = command111 (); }
       } elsif ($menu == 3) {
       } elsif ($menu == 3) {
          if    ($command == 1) { $default_folder_prefix          = command21 (); }
          if    ($command == 1) { $default_folder_prefix          = command21 (); }
          elsif ($command == 2) { $show_prefix_option             = command22 (); }
          elsif ($command == 2) { $show_prefix_option             = command22 (); }
@@ -651,8 +656,27 @@ sub command17 {
    }
    }
    return $new_smtpPort;
    return $new_smtpPort;
 }
 }
-# imap_server_type 
+
+# authenticated server 
 sub command18 {
 sub command18 {
+   print "Do you wish to use an authenticated SMTP server?  Your server must\n";
+   print "support this in order for SquirrelMail to work with it.  We implemented\n";
+   print "it according to RFC 2554.\n";
+   
+   $YesNo = 'n';
+   $YesNo = 'y' if ($use_authenticated_smtp eq "true");
+
+   print "Use authenticated SMTP server (y/n) [$WHT$YesNo$NRM]: $WHT";
+
+   $new_use_authenticated_smtp = <STDIN>;
+   $new_use_authenticated_smtp =~ tr/yn//cd;
+   return "true" if ($new_use_authenticated_smtp eq "y");
+   return "false" if ($new_use_authenticated_smtp eq "n");
+   return $use_authenticated_smtp;
+}   
+
+# imap_server_type 
+sub command19 {
    print "Each IMAP server has its own quirks.  As much as we tried to stick\n";
    print "Each IMAP server has its own quirks.  As much as we tried to stick\n";
    print "to standards, it doesn't help much if the IMAP server doesn't follow\n";
    print "to standards, it doesn't help much if the IMAP server doesn't follow\n";
    print "the same principles.  We have made some work-arounds for some of\n";
    print "the same principles.  We have made some work-arounds for some of\n";
@@ -674,7 +698,7 @@ sub command18 {
 }
 }
 
 
 # invert_time
 # invert_time
-sub command19 {
+sub command110 {
    print "Sometimes the date of messages sent is messed up (off by a few hours\n";
    print "Sometimes the date of messages sent is messed up (off by a few hours\n";
    print "on some machines).  Typically this happens if the system doesn't support\n";
    print "on some machines).  Typically this happens if the system doesn't support\n";
    print "tm_gmtoff.  It will happen only if your time zone is \"negative\".\n";
    print "tm_gmtoff.  It will happen only if your time zone is \"negative\".\n";
@@ -696,7 +720,7 @@ sub command19 {
    return $invert_time;
    return $invert_time;
 }   
 }   
 
 
-sub command110 {
+sub command111 {
 	print "This is the delimiter that your IMAP server uses to distinguish between\n";
 	print "This is the delimiter that your IMAP server uses to distinguish between\n";
 	print "folders.  For example, Cyrus uses '.' as the delimiter and a complete\n";
 	print "folders.  For example, Cyrus uses '.' as the delimiter and a complete\n";
 	print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
 	print "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
@@ -1536,16 +1560,17 @@ sub save_data {
 
 
    print FILE "\n";
    print FILE "\n";
 
 
-   print FILE "\t\$domain               = \"$domain\";\n";
-   print FILE "\t\$imapServerAddress    = \"$imapServerAddress\";\n";
-   print FILE "\t\$imapPort             =  $imapPort;\n";
-   print FILE "\t\$useSendmail          =  $useSendmail;\n";
-   print FILE "\t\$smtpServerAddress    = \"$smtpServerAddress\";\n";
-   print FILE "\t\$smtpPort             =  $smtpPort;\n";
-   print FILE "\t\$sendmail_path        = \"$sendmail_path\";\n";
-   print FILE "\t\$imap_server_type     = \"$imap_server_type\";\n";
-   print FILE "\t\$invert_time          = $invert_time;\n";
-	print FILE "\t\$optional_delimiter   = \"$optional_delimiter\";\n";
+   print FILE "\t\$domain                 = \"$domain\";\n";
+   print FILE "\t\$imapServerAddress      = \"$imapServerAddress\";\n";
+   print FILE "\t\$imapPort               =  $imapPort;\n";
+   print FILE "\t\$useSendmail            =  $useSendmail;\n";
+   print FILE "\t\$smtpServerAddress      = \"$smtpServerAddress\";\n";
+   print FILE "\t\$smtpPort               =  $smtpPort;\n";
+   print FILE "\t\$sendmail_path          = \"$sendmail_path\";\n";
+   print FILE "\t\$use_authenticated_smtp = $use_authenticated_smtp;\n";
+   print FILE "\t\$imap_server_type       = \"$imap_server_type\";\n";
+   print FILE "\t\$invert_time            = $invert_time;\n";
+   print FILE "\t\$optional_delimiter     = \"$optional_delimiter\";\n";
    
    
    print FILE "\n";
    print FILE "\n";
 
 

+ 2 - 0
functions/imap_mailbox.php

@@ -157,6 +157,8 @@
          //$boxes[$g]['unformatted-disp'] = ereg_replace('^' . $folder_prefix, '', $mailbox);
          //$boxes[$g]['unformatted-disp'] = ereg_replace('^' . $folder_prefix, '', $mailbox);
          if (substr($mailbox,0,strlen($folder_prefix))==$folder_prefix) { 
          if (substr($mailbox,0,strlen($folder_prefix))==$folder_prefix) { 
             $boxes[$g]['unformatted-disp'] = substr($mailbox, strlen($folder_prefix));
             $boxes[$g]['unformatted-disp'] = substr($mailbox, strlen($folder_prefix));
+         } else if (strtolower($mailbox) == "inbox") {
+            $boxes[$g]['unformatted-disp'] = $mailbox;
          }
          }
          $boxes[$g]['id'] = $g;
          $boxes[$g]['id'] = $g;
 
 

+ 25 - 6
functions/smtp.php

@@ -322,7 +322,7 @@
 
 
    function sendSMTP($t, $c, $b, $subject, $body, $more_headers) {
    function sendSMTP($t, $c, $b, $subject, $body, $more_headers) {
       global $username, $popuser, $domain, $version, $smtpServerAddress, $smtpPort,
       global $username, $popuser, $domain, $version, $smtpServerAddress, $smtpPort,
-         $data_dir, $color;
+         $data_dir, $color, $use_authenticating_smtp;
 
 
       $to = expandAddrs(parseAddrs($t));
       $to = expandAddrs(parseAddrs($t));
       $cc = expandAddrs(parseAddrs($c));
       $cc = expandAddrs(parseAddrs($c));
@@ -345,9 +345,27 @@
       $cc_list = getLineOfAddrs($cc);
       $cc_list = getLineOfAddrs($cc);
 
 
       /** Lets introduce ourselves */
       /** Lets introduce ourselves */
-      fputs($smtpConnection, "HELO $domain\r\n");
-      $tmp = fgets($smtpConnection, 1024);
-      errorCheck($tmp, $smtpConnection);
+      if (! isset ($use_authenticating_smtp)) {
+         fputs($smtpConnection, "HELO $domain\r\n");
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
+      } else {
+         fputs($smtpConnection, "EHLO $domain\r\n");
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
+
+         fputs($smtpConnection, "AUTH LOGIN\r\n");
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
+
+         fputs($smtpConnection, base64_encode ($username) . "\r\n");
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
+
+         fputs($smtpConnection, base64_encode ($OneTimePadDecrypt($key, $onetimepad)) . "\r\n");
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
+      }
 
 
       /** Ok, who is sending the message? */
       /** Ok, who is sending the message? */
       fputs($smtpConnection, "MAIL FROM: <$from_addr>\r\n");
       fputs($smtpConnection, "MAIL FROM: <$from_addr>\r\n");
@@ -450,13 +468,14 @@
                      $status = 0;
                      $status = 0;
                      break;
                      break;
 
 
-
+         case 235:   return; break;
          case 250:   $message = 'Requested mail action okay, completed';
          case 250:   $message = 'Requested mail action okay, completed';
                      $status = 5;
                      $status = 5;
                      break;
                      break;
          case 251:   $message = 'User not local; will forward';
          case 251:   $message = 'User not local; will forward';
                      $status = 5;
                      $status = 5;
                      break;
                      break;
+         case 334:   return; break;
          case 450:   $message = 'Requested mail action not taken:  mailbox unavailable';
          case 450:   $message = 'Requested mail action not taken:  mailbox unavailable';
                      $status = 0;
                      $status = 0;
                      break;
                      break;
@@ -506,7 +525,7 @@
    }
    }
 
 
    function sendMessage($t, $c, $b, $subject, $body, $reply_id) {
    function sendMessage($t, $c, $b, $subject, $body, $reply_id) {
-      global $useSendmail, $msg_id, $is_reply, $mailbox;
+      global $useSendmail, $msg_id, $is_reply, $mailbox, $onetimepad;
       global $data_dir, $username, $domain, $key, $version, $sent_folder, $imapServerAddress, $imapPort;
       global $data_dir, $username, $domain, $key, $version, $sent_folder, $imapServerAddress, $imapPort;
       $more_headers = Array();
       $more_headers = Array();