From 783e926eb2c99b6a55bdf774b64afa7828e5732b Mon Sep 17 00:00:00 2001 From: pdontthink Date: Sat, 19 Jul 2008 17:27:54 +0000 Subject: [PATCH] Allow a different server address for the POP server to be configured when using POP before SMTP git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13239 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 2 ++ class/deliver/Deliver_SMTP.class.php | 4 ++-- config/conf.pl | 36 ++++++++++++++++++++++++---- config/config_default.php | 11 +++++++++ functions/compose.php | 6 +++-- src/compose.php | 5 ++-- src/configtest.php | 7 +++--- src/read_body.php | 5 ++-- 8 files changed, 61 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 09304d84..0c87ca9d 100644 --- a/ChangeLog +++ b/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) -------------------------------------- diff --git a/class/deliver/Deliver_SMTP.class.php b/class/deliver/Deliver_SMTP.class.php index 5ac04372..d2458729 100644 --- a/class/deliver/Deliver_SMTP.class.php +++ b/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; diff --git a/config/conf.pl b/config/conf.pl index 423fe16d..4f3206ea 100755 --- a/config/conf.pl +++ b/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 = ; $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 = ; + 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"; diff --git a/config/config_default.php b/config/config_default.php index 549a97af..74956084 100644 --- a/config/config_default.php +++ b/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 ***/ /** diff --git a/functions/compose.php b/functions/compose.php index dd8ddcac..5839a592 100644 --- a/functions/compose.php +++ b/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; diff --git a/src/compose.php b/src/compose.php index 5eba2878..8ff63932 100644 --- a/src/compose.php +++ b/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; diff --git a/src/configtest.php b/src/configtest.php index 306dbe4a..3400c8c8 100644 --- a/src/configtest.php +++ b/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'); diff --git a/src/read_body.php b/src/read_body.php index 378f43c3..b04b4738 100644 --- a/src/read_body.php +++ b/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) { -- 2.25.1