浏览代码

Allow a different server address for the POP server to be configured when using POP before SMTP

pdontthink 17 年之前
父节点
当前提交
8523ca3d2c
共有 8 个文件被更改,包括 61 次插入15 次删除
  1. 2 0
      ChangeLog
  2. 2 2
      class/deliver/Deliver_SMTP.class.php
  3. 32 4
      config/conf.pl
  4. 11 0
      config/config_default.php
  5. 4 2
      functions/compose.php
  6. 3 2
      src/compose.php
  7. 4 3
      src/configtest.php
  8. 3 2
      src/read_body.php

+ 2 - 0
ChangeLog

@@ -259,6 +259,8 @@ Version 1.5.2 - SVN
     have long been in the file-based prefs backend
   - Removed the Address Take (abook_take) plugin; please see the Add Address
     (third party) plugin.
+  - Allow a different server address for the POP server to be configured when
+    using POP before SMTP.
 
 Version 1.5.1 (branched on 2006-02-12)
 --------------------------------------

+ 2 - 2
class/deliver/Deliver_SMTP.class.php

@@ -62,11 +62,11 @@ class Deliver_SMTP extends Deliver {
         }
     }
 
-    function initStream($message, $domain, $length=0, $host='', $port='', $user='', $pass='', $authpop=false) {
+    function initStream($message, $domain, $length=0, $host='', $port='', $user='', $pass='', $authpop=false, $pop_host='') {
         global $use_smtp_tls,$smtp_auth_mech;
 
         if ($authpop) {
-            $this->authPop($host, '', $user, $pass);
+            $this->authPop($pop_host, '', $user, $pass);
         }
 
         $rfc822_header = $message->rfc822_header;

+ 32 - 4
config/conf.pl

@@ -372,6 +372,7 @@ close FILE;
 $useSendmail = 'false'                  if ( lc($useSendmail) ne 'true' );
 $sendmail_path = "/usr/sbin/sendmail"   if ( !$sendmail_path );
 $pop_before_smtp = 'false'              if ( !$pop_before_smtp );
+$pop_before_smtp_host = ''              if ( !$pop_before_smtp_host );
 $default_unseen_notify = 2              if ( !$default_unseen_notify );
 $default_unseen_type = 1                if ( !$default_unseen_type );
 $config_use_color = 0                   if ( !$config_use_color );
@@ -1333,13 +1334,38 @@ sub command18a {
     $YesNo = 'n';
     $YesNo = 'y' if ( lc($pop_before_smtp) eq 'true' );
 
-    print "Use pop before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT";
+    print "Use POP before SMTP (y/n) [$WHT$YesNo$NRM]: $WHT";
 
     $new_pop_before_smtp = <STDIN>;
     $new_pop_before_smtp =~ tr/yn//cd;
-    return 'true'  if ( $new_pop_before_smtp eq "y" );
-    return 'false'  if ( $new_pop_before_smtp eq "n" );
-    return $pop_before_smtp;
+    if ( $new_pop_before_smtp eq "y" ) {
+        $new_pop_before_smtp = "true";
+    } elsif ( $new_pop_before_smtp eq "n" ) {
+        $new_pop_before_smtp = "false";
+    } else {
+        $new_pop_before_smtp = $pop_before_smtp;
+    }
+
+    # if using POP before SMTP, allow setting of custom POP server address
+    if ($new_pop_before_smtp eq "true") {
+        print "$NRM\nIf the address of the POP server is not the same as\n";
+        print "your SMTP server, you may specify it here. Leave blank (to\n";
+        print "clear this, enter only spaces) to use the same address as\n";
+        print "your SMTP server.\n";
+        print "POP before SMTP server address [$WHT$pop_before_smtp_host$NRM]: $WHT";
+
+        $new_pop_before_smtp_host = <STDIN>;
+        if ( $new_pop_before_smtp_host eq "\n" ) {
+            $new_pop_before_smtp_host = $pop_before_smtp_host;
+        } elsif ($new_pop_before_smtp_host =~ /^\s+$/) {
+            $new_pop_before_smtp_host = '';
+        } else {
+            $new_pop_before_smtp_host =~ s/[\r|\n]//g;
+        }
+        $pop_before_smtp_host = $new_pop_before_smtp_host;
+    }
+
+    return $new_pop_before_smtp;
 }
 
 # imap_server_type
@@ -4570,6 +4596,8 @@ sub save_data {
         # boolean
         print CF "\$pop_before_smtp        = $pop_before_smtp;\n";
         # string
+        print CF "\$pop_before_smtp_host   = '$pop_before_smtp_host';\n";
+        # string
         print CF "\$imap_server_type       = '$imap_server_type';\n";
         # boolean
         print CF "\$invert_time            = $invert_time;\n";

+ 11 - 0
config/config_default.php

@@ -322,6 +322,17 @@ $optional_delimiter = 'detect';
  */
 $pop_before_smtp = false;
 
+/**
+ * POP before SMTP server address
+ *
+ * When using POP3 before SMTP, if the POP server address is
+ * not the same as the SMTP server address, specify it here.
+ * If this is left empty, the SMTP server address will be
+ * used by default.
+ * @global bool $pop_before_smtp_host
+ */
+$pop_before_smtp_host = '';
+
 
 /*** Folder Settings ***/
 /**

+ 4 - 2
functions/compose.php

@@ -130,14 +130,16 @@ function sq_send_mail($to, $subject, $body, $from, $cc='', $bcc='', $message='')
    if (!$useSendmail) {
       require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
       $deliver = new Deliver_SMTP();
-      global $smtpServerAddress, $smtpPort, $pop_before_smtp, $domain;
+      global $smtpServerAddress, $smtpPort, $pop_before_smtp,
+             $domain, $pop_before_smtp_host;
 
       $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+      if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress;
       $user = '';
       $pass = '';
       get_smtp_user($user, $pass);
       $stream = $deliver->initStream($message,$domain,0,
-                $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
+                $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host);
    } else {
       require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
       global $sendmail_path, $sendmail_args;

+ 3 - 2
src/compose.php

@@ -1577,12 +1577,13 @@ function deliverMessage(&$composeMessage, $draft=false) {
     if (!$useSendmail && !$draft) {
         require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
         $deliver = new Deliver_SMTP();
-        global $smtpServerAddress, $smtpPort, $pop_before_smtp;
+        global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host;
 
         $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+        if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress;
         get_smtp_user($user, $pass);
         $stream = $deliver->initStream($composeMessage,$domain,0,
-                $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
+                $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host);
     } elseif (!$draft) {
         require_once(SM_PATH . 'class/deliver/Deliver_SendMail.class.php');
         global $sendmail_path, $sendmail_args;

+ 4 - 3
src/configtest.php

@@ -660,15 +660,16 @@ if($useSendmail) {
 
     /* POP before SMTP */
     if($pop_before_smtp) {
-        $stream = fsockopen($smtpServerAddress, 110, $err_no, $err_str);
+        if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress;
+        $stream = fsockopen($pop_before_smtp_host, 110, $err_no, $err_str);
         if (!$stream) {
-            do_err("Error connecting to POP Server ($smtpServerAddress:110) "
+            do_err("Error connecting to POP Server ($pop_before_smtp_host:110) "
                 . $err_no . ' : ' . htmlspecialchars($err_str));
         }
 
         $tmp = fgets($stream, 1024);
         if (substr($tmp, 0, 3) != '+OK') {
-            do_err("Error connecting to POP Server ($smtpServerAddress:110)"
+            do_err("Error connecting to POP Server ($pop_before_smtp_host:110)"
                 . ' '.htmlspecialchars($tmp));
         }
         fputs($stream, 'QUIT');

+ 3 - 2
src/read_body.php

@@ -255,11 +255,12 @@ function SendMDN ( $mailbox, $passed_id, $message, $imapConnection) {
     } else {
         require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
         $deliver = new Deliver_SMTP();
-        global $smtpServerAddress, $smtpPort, $pop_before_smtp;
+        global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host;
         $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+        if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress;
         get_smtp_user($user, $pass);
         $stream = $deliver->initStream($composeMessage,$domain,0,
-                                       $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
+                                       $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host);
     }
     $success = false;
     if ($stream) {