浏览代码

added config option to specify the IMAP folder delimiter, rather than
autodetecting all the time (which doesn't work on some servers, apparently)

Luke Ehresman 24 年之前
父节点
当前提交
4a6ff6d6d7
共有 3 个文件被更改,包括 45 次插入14 次删除
  1. 1 0
      ChangeLog
  2. 33 9
      config/conf.pl
  3. 11 5
      functions/imap_general.php

+ 1 - 0
ChangeLog

@@ -1,5 +1,6 @@
 Version 1.0pre1 -- DEVELOPMENT
 ------------------------------
+- added config option to set IMAP folder delimiter rather than always detecting it
 - Made session cookie parameter use PHP's settings rather than making assumptions
 - Select/Deslect all implemented using only HTML (not Javascript)
 - Fixed default charset that is sent with outbound messages (now user's preferred charset)

+ 33 - 9
config/conf.pl

@@ -237,6 +237,9 @@ if (!$invert_time) {
 if (!$force_username_lowercase) {
 	$force_username_lowercase = "false";
 }
+if (!$optional_delimiter) {
+	$optional_delimiter = "detect";
+}
 
 #####################################################################################
 if ($config_use_color == 1) {
@@ -296,6 +299,7 @@ while (($command ne "q") && ($command ne "Q")) {
       }
       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 "\n";
       print "R   Return to Main Menu\n";
    } elsif ($menu == 3) {
@@ -441,15 +445,16 @@ while (($command ne "q") && ($command ne "Q")) {
          elsif ($command == 2) { $org_logo   = command2 (); }
          elsif ($command == 3) { $org_title  = command3 (); }
       } elsif ($menu == 2) {
-         if    ($command == 1) { $domain             = command11 (); }
-         elsif ($command == 2) { $imapServerAddress  = command12 (); }
-         elsif ($command == 3) { $imapPort           = command13 (); }
-         elsif ($command == 4) { $useSendmail        = command14 (); }
-         elsif ($command == 5) { $sendmail_path      = command15 (); }
-         elsif ($command == 6) { $smtpServerAddress  = command16 (); }
-         elsif ($command == 7) { $smtpPort           = command17 (); }
-         elsif ($command == 8) { $imap_server_type   = command18 (); }
-         elsif ($command == 9) { $invert_time        = command19 (); }
+         if    ($command == 1)  { $domain             = command11 (); }
+         elsif ($command == 2)  { $imapServerAddress  = command12 (); }
+         elsif ($command == 3)  { $imapPort           = command13 (); }
+         elsif ($command == 4)  { $useSendmail        = command14 (); }
+         elsif ($command == 5)  { $sendmail_path      = command15 (); }
+         elsif ($command == 6)  { $smtpServerAddress  = command16 (); }
+         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 ($menu == 3) {
          if    ($command == 1) { $default_folder_prefix          = command21 (); }
          elsif ($command == 2) { $show_prefix_option             = command22 (); }
@@ -689,6 +694,24 @@ sub command19 {
    return $invert_time;
 }   
 
+sub command110 {
+	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 "folder would look like 'INBOX.Friends.Bob', while UW uses '/' and would\n";
+	print "look like 'INBOX/Friends/Bob'.  Normally this should be left at 'detect'\n";
+	print "but if you are sure you konw what delimiter your server uses, you can\n";
+	print "specify it here.\n";
+	print "\nTo have it autodetect the delimiter, set it to 'detect'.\n\n";
+   print "[$WHT$optional_delimiter$NRM]: $WHT";
+   $new_optional_delimiter = <STDIN>;
+   if ($new_optional_delimiter eq "\n") {
+      $new_optional_delimiter = $optional_delimiter;
+   } else {
+      $new_optional_delimiter =~ s/[\r|\n]//g;
+   }
+   return $new_optional_delimiter;
+}
+
 # MOTD
 sub command71 {
    print "\nYou can now create the welcome message that is displayed\n";
@@ -1520,6 +1543,7 @@ sub save_data {
    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 "\n";
 

+ 11 - 5
functions/imap_general.php

@@ -167,12 +167,18 @@
     **  Returns the delimeter between mailboxes:  INBOX/Test, or INBOX.Test... 
     ******************************************************************************/
    function sqimap_get_delimiter ($imap_stream = false) {
-      fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
-      $read = sqimap_read_data($imap_stream, ".", true, $a, $b);
-      $quote_position = strpos ($read[0], "\"");
-      $delim = substr ($read[0], $quote_position+1, 1);
+		global $optional_delimiter;
+		if (!$optional_delimiter) $optional_delimiter = "detect";
 
-      return $delim;
+		if (strtolower($optional_delimiter) == "detect") {
+      	fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
+      	$read = sqimap_read_data($imap_stream, ".", true, $a, $b);
+      	$quote_position = strpos ($read[0], "\"");
+      	$delim = substr ($read[0], $quote_position+1, 1);
+      	return $delim;
+		} else {
+			return $optional_delimiter;
+		}
    
    /* According to something that I can't find, this is supposed to work on all systems