فهرست منبع

Rewrote SMTP functions, now includes error correction, fixed bugs in theme
selection on personal preferences.

Luke Ehresman 25 سال پیش
والد
کامیت
f85852280d
5فایلهای تغییر یافته به همراه121 افزوده شده و 13 حذف شده
  1. 1 1
      config/config.php
  2. 5 0
      functions/prefs.php
  3. 107 1
      functions/smtp.php
  4. 3 3
      src/login.php
  5. 5 8
      src/signout.php

+ 1 - 1
config/config.php

@@ -50,7 +50,7 @@
     $theme[3]["NAME"] = "Slashdot";
 
 
-//  Whether or not to use $color[11] for special folders.  If not, special
+//  Whether or not to use a special color for special folders.  If not, special
 //  folders will be the same color as the other folders
     $use_special_folder_color = true;
 

+ 5 - 0
functions/prefs.php

@@ -8,6 +8,11 @@
    /** returns the value for $string **/
    function getPref($username, $string) {
       $filename = "../data/$username.pref";
+      if (!file_exists($filename)) {
+         echo "Preference file \"$filename\" not found.  Exiting abnormally";
+         exit;
+      }
+
       $file = fopen($filename, "r");
 
       /** read in all the preferences **/

+ 107 - 1
functions/smtp.php

@@ -18,7 +18,6 @@
 
    function sendMessage($smtpServerAddress, $smtpPort, $username, $domain, $t, $c, $b, $subject, $body, $version) {
       include("../config/config.php");
-      include("../functions/prefs.php");
 
       $to = parseAddrs($t);
       $cc = parseAddrs($c);
@@ -40,6 +39,7 @@
          exit;
       }
       $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+      errorCheck($tmp);
 
       $to_list = getLineOfAddrs($to);
       $cc_list = getLineOfAddrs($cc);
@@ -47,28 +47,34 @@
       /** Lets introduce ourselves */
       fputs($smtpConnection, "HELO $domain\n");
       $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+      errorCheck($tmp);
 
       /** Ok, who is sending the message? */
       fputs($smtpConnection, "MAIL FROM:$from_addr\n");
       $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+      errorCheck($tmp);
 
       /** send who the recipients are */
       for ($i = 0; $i < count($to); $i++) {
          fputs($smtpConnection, "RCPT TO:<$to[$i]>\n");
          $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+         errorCheck($tmp);
       }
       for ($i = 0; $i < count($cc); $i++) {
          fputs($smtpConnection, "RCPT TO:<$cc[$i]>\n");
          $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+         errorCheck($tmp);
       }
       for ($i = 0; $i < count($bcc); $i++) {
          fputs($smtpConnection, "RCPT TO:<$bcc[$i]>\n");
          $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+         errorCheck($tmp);
       }
 
       /** Lets start sending the actual message */
       fputs($smtpConnection, "DATA\n");
       $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+      errorCheck($tmp);
 
       fputs($smtpConnection, "Subject: $subject\n"); // Subject
       fputs($smtpConnection, "From: $from\n"); // Subject
@@ -86,9 +92,109 @@
 
       fputs($smtpConnection, ".\n"); // end the DATA part
       $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
+      $num = errorCheck($tmp);
+      if ($num != 250) {
+         echo "<HTML><BODY BGCOLOR=FFFFFF>ERROR<BR>Message not sent!<BR>Reason given: $tmp<BR></BODY></HTML>";
+      }
 
       fputs($smtpConnection, "QUIT\n"); // log off
 
       fclose($smtpConnection);
    }
+
+
+   function errorCheck($line) {
+      // Status:  0 = fatal
+      //          5 = ok
+
+      $err_num = substr($line, 0, strpos($line, " "));
+      switch ($err_num) {
+         case 500:   $message = "Syntax error; command not recognized";
+                     $status = 0;
+                     break;
+         case 501:   $message = "Syntax error in parameters or arguments";
+                     $status = 0;
+                     break;
+         case 502:   $message = "Command not implemented";
+                     $status = 0;
+                     break;
+         case 503:   $message = "Bad sequence of commands";
+                     $status = 0;
+                     break;
+         case 504:   $message = "Command parameter not implemented";
+                     $status = 0;
+                     break;
+
+
+         case 211:   $message = "System status, or system help reply";
+                     $status = 5;
+                     break;
+         case 214:   $message = "Help message";
+                     $status = 5;
+                     break;
+
+
+         case 220:   $message = "Service ready";
+                     $status = 5;
+                     break;
+         case 221:   $message = "Service closing transmission channel";
+                     $status = 5;
+                     break;
+         case 421:   $message = "Service not available, closing chanel";
+                     $status = 0;
+                     break;
+
+
+         case 250:   $message = "Requested mail action okay, completed";
+                     $status = 5;
+                     break;
+         case 251:   $message = "User not local; will forward";
+                     $status = 5;
+                     break;
+         case 450:   $message = "Requested mail action not taken:  mailbox unavailable";
+                     $status = 0;
+                     break;
+         case 550:   $message = "Requested action not taken:  mailbox unavailable";
+                     $status = 0;
+                     break;
+         case 451:   $message = "Requested action aborted:  error in processing";
+                     $status = 0;
+                     break;
+         case 551:   $message = "User not local; please try forwarding";
+                     $status = 0;
+                     break;
+         case 452:   $message = "Requested action not taken:  insufficient system storage";
+                     $status = 0;
+                     break;
+         case 552:   $message = "Requested mail action aborted:  exceeding storage allocation";
+                     $status = 0;
+                     break;
+         case 553:   $message = "Requested action not taken: mailbox name not allowed";
+                     $status = 0;
+                     break;
+         case 354:   $message = "Start mail input; end with .";
+                     $status = 5;
+                     break;
+         case 554:   $message = "Transaction failed";
+                     $status = 0;
+                     break;
+         default:    $message = "Unknown response: $line";
+                     $status = 0;
+                     $error_num = "001";
+                     break;
+      }
+
+      if ($status == 0) {
+         echo "<HTML><BODY BGCOLOR=FFFFFF>";
+         echo "<TT>";
+         echo "<BR><B>ERROR</B><BR><BR>";
+         echo "&nbsp;&nbsp;&nbsp;<B>Error Number: </B>$err_num<BR>";
+         echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Reason: </B>$message<BR>";
+         echo "<B>Server Response: </B>$line<BR>";
+         echo "<BR>MAIL NOT SENT";
+         echo "</TT></BODY></HTML>";
+         exit;
+      }
+      return $err_num;
+   }
 ?>

+ 3 - 3
src/login.php

@@ -15,17 +15,17 @@
    include("../config/config.php");
    include("../functions/strings.php");
 
-   echo "<BODY TEXT=\"$color[8]\" BGCOLOR=\"$color[4]\" LINK=\"$color[7]\" VLINK=\"$color[7]\" ALINK=\"$color[7]\">\n";
+   echo "<BODY TEXT=000000 BGCOLOR=FFFFFF LINK=0000CC VLINK=0000CC ALINK=0000CC>\n";
    echo "<FORM ACTION=webmail.php METHOD=\"POST\" NAME=f>\n";
    echo "<CENTER><IMG SRC=\"$org_logo\"</CENTER>\n";
    echo "<CENTER><FONT FACE=\"Arial,Helvetica\" SIZE=-2>SquirrelMail version $version<BR>By the SquirrelMail Development Team<BR></FONT><CENTER>\n";
    echo "<TABLE COLS=1 WIDTH=350>\n";
    echo "   <TR>\n";
-   echo "      <TD BGCOLOR=\"$color[0]\">\n";
+   echo "      <TD BGCOLOR=DCDCDC>\n";
    echo "         <B><CENTER><FONT FACE=\"Arial,Helvetica\">$org_name Login</FONT></CENTER></B>\n";
    echo "      </TD>\n";
    echo "   </TR><TR>\n";
-   echo "      <TD BGCOLOR=\"$color[4]\">\n";
+   echo "      <TD BGCOLOR=FFFFFF>\n";
    echo "         <TABLE COLS=2 WIDTH=100%>\n";
    echo "            <TR>\n";
    echo "               <TD WIDTH=30% ALIGN=right>\n";

+ 5 - 8
src/signout.php

@@ -16,23 +16,20 @@
 ?>
 <HTML>
 <?
-   include ("../config/config.php");
-   include("../src/load_prefs.php");
-
-   echo "<BODY TEXT=\"$color[8]\" BGCOLOR=\"$color[4]\" LINK=\"$color[7]\" VLINK=\"$color[7]\" ALINK=\"$color[7]\">\n";
-   echo "<BR><BR><TABLE BGCOLOR=\"$color[4]\" BORDER=0 COLS=1 WIDTH=50% CELLSPACING=0 CELLPADDING=2 ALIGN=CENTER>";
-   echo "   <TR BGCOLOR=\"$color[3]\" WIDTH=100%>";
+   echo "<BODY TEXT=000000 BGCOLOR=FFFFFF LINK=0000CC VLINK=0000CC ALINK=0000CC>\n";
+   echo "<BR><BR><TABLE BGCOLOR=FFFFFF BORDER=0 COLS=1 WIDTH=50% CELLSPACING=0 CELLPADDING=2 ALIGN=CENTER>";
+   echo "   <TR BGCOLOR=DCDCDC WIDTH=100%>";
    echo "      <TD ALIGN=CENTER>";
    echo "         <FONT FACE=\"Arial,Helvetica\"><B>Sign Out</B></FONT>";
    echo "      </TD>";
    echo "   </TR>";
-   echo "   <TR BGCOLOR=\"$color[4]\" WIDTH=100%>";
+   echo "   <TR BGCOLOR=FFFFFF WIDTH=100%>";
    echo "      <TD ALIGN=CENTER>";
    echo "         <FONT FACE=\"Arial,Helvetica\"><BR>You have been successfully signed out.<BR></FONT>";
    echo "         <FONT FACE=\"Arial,Helvetica\">Click here to <A HREF=\"login.php\" TARGET=_top>log back in.</A></FONT><BR><BR>";
    echo "      </TD>";
    echo "   </TR>";
-   echo "   <TR BGCOLOR=\"$color[0]\" WIDTH=100%>";
+   echo "   <TR BGCOLOR=DCDCDC WIDTH=100%>";
    echo "      <TD ALIGN=CENTER>";
    echo "         <FONT FACE=\"Arial,Helvetica\"><BR></FONT>";
    echo "      </TD>";