From d2f4c91494b65e931493e308a015f1ef1654902d Mon Sep 17 00:00:00 2001 From: lkehresman Date: Fri, 13 Apr 2001 15:25:01 +0000 Subject: [PATCH] added authenticated smtp server support git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1226 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 7 +++-- config/conf.pl | 63 ++++++++++++++++++++++++++------------ functions/imap_mailbox.php | 2 ++ functions/smtp.php | 31 +++++++++++++++---- 4 files changed, 76 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f86cd2a..7506568d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,12 @@ 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 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 Version 1.0.5 -- DEVELOPMENT diff --git a/config/conf.pl b/config/conf.pl index 2cc338cc..ab645573 100755 --- a/config/conf.pl +++ b/config/conf.pl @@ -242,6 +242,9 @@ if (!$force_username_lowercase) { if (!$optional_delimiter) { $optional_delimiter = "detect"; } +if (!$use_authenticated_smtp) { + $use_authenticated_smtp = "false"; +} ##################################################################################### if ($config_use_color == 1) { @@ -298,10 +301,11 @@ while (($command ne "q") && ($command ne "Q")) { } else { print "6. SMTP Server : $WHT$smtpServerAddress$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 "R Return to Main Menu\n"; } elsif ($menu == 3) { @@ -454,9 +458,10 @@ while (($command ne "q") && ($command ne "Q")) { 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 ($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) { if ($command == 1) { $default_folder_prefix = command21 (); } elsif ($command == 2) { $show_prefix_option = command22 (); } @@ -651,8 +656,27 @@ sub command17 { } return $new_smtpPort; } -# imap_server_type + +# authenticated server 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 = ; + $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 "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"; @@ -674,7 +698,7 @@ sub command18 { } # invert_time -sub command19 { +sub command110 { 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 "tm_gmtoff. It will happen only if your time zone is \"negative\".\n"; @@ -696,7 +720,7 @@ sub command19 { return $invert_time; } -sub command110 { +sub command111 { 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"; @@ -1536,16 +1560,17 @@ sub save_data { 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"; diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index f88a5995..b1219784 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -157,6 +157,8 @@ //$boxes[$g]['unformatted-disp'] = ereg_replace('^' . $folder_prefix, '', $mailbox); if (substr($mailbox,0,strlen($folder_prefix))==$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; diff --git a/functions/smtp.php b/functions/smtp.php index 09a1a7e4..6b533787 100644 --- a/functions/smtp.php +++ b/functions/smtp.php @@ -322,7 +322,7 @@ function sendSMTP($t, $c, $b, $subject, $body, $more_headers) { global $username, $popuser, $domain, $version, $smtpServerAddress, $smtpPort, - $data_dir, $color; + $data_dir, $color, $use_authenticating_smtp; $to = expandAddrs(parseAddrs($t)); $cc = expandAddrs(parseAddrs($c)); @@ -345,9 +345,27 @@ $cc_list = getLineOfAddrs($cc); /** 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? */ fputs($smtpConnection, "MAIL FROM: <$from_addr>\r\n"); @@ -450,13 +468,14 @@ $status = 0; break; - + case 235: return; break; case 250: $message = 'Requested mail action okay, completed'; $status = 5; break; case 251: $message = 'User not local; will forward'; $status = 5; break; + case 334: return; break; case 450: $message = 'Requested mail action not taken: mailbox unavailable'; $status = 0; break; @@ -506,7 +525,7 @@ } 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; $more_headers = Array(); -- 2.25.1