From d5f3486369f9f286acd5994d1530e4e05f71a746 Mon Sep 17 00:00:00 2001 From: lkehresman Date: Sun, 22 Apr 2001 04:59:05 +0000 Subject: [PATCH] greatly improved smtp error handling (doesn't trash messages if an error occurs) git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1284 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 1 + functions/mime.php | 1 + functions/smtp.php | 49 +++++++++++++++++++++++----------------------- src/compose.php | 4 ++-- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index c98bd5a5..4f8cd0b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ Version 1.1.0 -- DEVELOPMENT ---------------------------- +- Much improved SMTP error handling (patch by Jeff Evans) - Preferences are now cached instead of read in every page load. - Improved URL parser - Added ability to read HTML messages by default instead of plain text (Display Options) diff --git a/functions/mime.php b/functions/mime.php index daae91b7..b700aceb 100644 --- a/functions/mime.php +++ b/functions/mime.php @@ -561,6 +561,7 @@ if (isset($message->entities[0])) { $body .= formatAttachments ($message, $ent_num, $message->header->mailbox, $id); } + $body .= ""; } else { $body = formatAttachments ($message, -1, $message->header->mailbox, $id); } diff --git a/functions/smtp.php b/functions/smtp.php index 3b9e6579..b033490e 100644 --- a/functions/smtp.php +++ b/functions/smtp.php @@ -343,7 +343,7 @@ exit; } $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); $to_list = getLineOfAddrs($to); $cc_list = getLineOfAddrs($cc); @@ -352,51 +352,51 @@ if (! isset ($use_authenticated_smtp) || $use_authenticated_smtp == false) { fputs($smtpConnection, "HELO $domain\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); } else { fputs($smtpConnection, "EHLO $domain\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); fputs($smtpConnection, "AUTH LOGIN\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); fputs($smtpConnection, base64_encode ($username) . "\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); fputs($smtpConnection, base64_encode ($OneTimePadDecrypt($key, $onetimepad)) . "\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); } /** Ok, who is sending the message? */ fputs($smtpConnection, "MAIL FROM: <$from_addr>\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); /** send who the recipients are */ for ($i = 0; $i < count($to); $i++) { fputs($smtpConnection, "RCPT TO: $to[$i]\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); } for ($i = 0; $i < count($cc); $i++) { fputs($smtpConnection, "RCPT TO: $cc[$i]\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); } for ($i = 0; $i < count($bcc); $i++) { fputs($smtpConnection, "RCPT TO: $bcc[$i]\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); } /** Lets start sending the actual message */ fputs($smtpConnection, "DATA\r\n"); $tmp = fgets($smtpConnection, 1024); - errorCheck($tmp, $smtpConnection); + if (errorCheck($tmp, $smtpConnection)!=5) return(0); // Send the message $headerlength = write822Header ($smtpConnection, $t, $c, $b, $subject, $more_headers); @@ -404,10 +404,15 @@ fputs($smtpConnection, ".\r\n"); // end the DATA part $tmp = fgets($smtpConnection, 1024); - $num = errorCheck($tmp, $smtpConnection); + $num = errorCheck($tmp, $smtpConnection, verbose); if ($num != 250) { - $tmp = nl2br(htmlspecialchars($tmp)); - echo "ERROR
Message not sent!
Reason given: $tmp
"; + $tmp = nl2br(htmlspecialchars($tmp)); + displayPageHeader($color, 'None'); + include ("../functions/display_messages.php"); + $lines = nl2br(htmlspecialchars($lines)); + $msg = "Message not sent!
\nReason given: $tmp"; + plain_error_message($msg, $color); + return(0); } fputs($smtpConnection, "QUIT\r\n"); // log off @@ -469,14 +474,14 @@ $status = 0; break; - case 235: return; break; + case 235: return(5); 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 334: return(5); break; case 450: $message = 'Requested mail action not taken: mailbox unavailable'; $status = 0; break; @@ -512,16 +517,12 @@ if ($status == 0) { displayPageHeader($color, 'None'); - echo ''; - echo "
ERROR

"; - echo "   Error Number: $err_num
"; - echo "         Reason: $message
"; + include ("../functions/display_messages.php"); $lines = nl2br(htmlspecialchars($lines)); - echo "Server Response: $lines
"; - echo '
MAIL NOT SENT'; - echo '
'; - exit; + $msg = $message . "
\nServer replied: $lines"; + plain_error_message($msg, $color); } + if ($verbose == "") return $status; return $err_num; } diff --git a/src/compose.php b/src/compose.php index eb6dbcf8..1389e1ff 100644 --- a/src/compose.php +++ b/src/compose.php @@ -424,8 +424,8 @@ // Set $default_charset to correspond with the user's selection // of language interface. set_my_charset(); - sendMessage($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id); - header ("Location: right_main.php?mailbox=$urlMailbox&sort=$sort&startMessage=1"); + if (sendMessage($send_to, $send_to_cc, $send_to_bcc, $subject, $body, $reply_id) == 0) {showInputForm(); exit();} +// header ("Location: right_main.php?mailbox=$urlMailbox&sort=$sort&startMessage=1"); } else { //$imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); displayPageHeader($color, $mailbox); -- 2.25.1