added "cc" and "body" for searching
[squirrelmail.git] / functions / smtp.php
index b7ececf2c20312ffe92b9c961ff01c8c965bf3d9..868c2620e89f63674e5053c715e882df7d1ec50b 100644 (file)
       global $REMOTE_ADDR, $SERVER_NAME, $REMOTE_PORT;
       global $data_dir, $username, $domain, $version, $useSendmail;
       global $default_charset, $HTTP_VIA, $HTTP_X_FORWARDED_FOR;
+      global $REMOTE_HOST;
 
       // Storing the header to make sure the header is the same
       // everytime the header is printed.
          $bcc_list = getLineOfAddrs($bcc);
          
          /* Encoding 8-bit characters and making from line */
-         $subject = encodeHeader($subject);
+         $subject = stripslashes(encodeHeader($subject));
          if ($from == "")
             $from = "<$from_addr>";
          else
-            $from = encodeHeader($from) . " <$from_addr>";
+            $from = "\"" . encodeHeader($from) . "\" <$from_addr>";
          
          /* This creates an RFC 822 date */
          $date = date("D, j M Y H:i:s ", mktime()) . timezone();
 
          /* Create a message-id */
          $message_id = "<" . $REMOTE_PORT . "." . $REMOTE_ADDR . ".";
-         $message_id .= time() . "@" . $SERVER_NAME .">";
+         $message_id .= time() . ".squirrel@" . $SERVER_NAME .">";
          
          /* Make an RFC822 Received: line */
-         $received_from = "$REMOTE_ADDR";
+         if (isset($REMOTE_HOST))
+            $received_from = "$REMOTE_HOST ([$REMOTE_ADDR])";
+         else
+            $received_from = $REMOTE_ADDR;
+    
          if (isset($HTTP_VIA) || isset ($HTTP_X_FORWARDED_FOR)) {
             if ($HTTP_X_FORWARDED_FOR == "")
                $HTTP_X_FORWARDED_FOR = "unknown";
             $received_from .= " (proxying for $HTTP_X_FORWARDED_FOR)";
          }            
-         $header = "Received: from $received_from by $SERVER_NAME with HTTP; ";
-         $header .= "$date\r\n";
+    
+         $header  = "Received: from $received_from\r\n";
+         $header .= "        (SquirrelMail authenticated user $username)\r\n";
+         $header .= "        by $SERVER_NAME with HTTP;\r\n";
+         $header .= "        $date\r\n";
          
          /* Insert the rest of the header fields */
          $header .= "Message-ID: $message_id\r\n";
          echo "$errorNumber : $errorString<br>";
          exit;
       }
-      $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-      errorCheck($tmp);
+      $tmp = fgets($smtpConnection, 1024);
+      errorCheck($tmp, $smtpConnection);
 
       $to_list = getLineOfAddrs($to);
       $cc_list = getLineOfAddrs($cc);
 
       /** Lets introduce ourselves */
       fputs($smtpConnection, "HELO $domain\r\n");
-      $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-      errorCheck($tmp);
+      $tmp = fgets($smtpConnection, 1024);
+      errorCheck($tmp, $smtpConnection);
 
       /** Ok, who is sending the message? */
       fputs($smtpConnection, "MAIL FROM:<$from_addr>\r\n");
-      $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-      errorCheck($tmp);
+      $tmp = fgets($smtpConnection, 1024);
+      errorCheck($tmp, $smtpConnection);
 
       /** send who the recipients are */
       for ($i = 0; $i < count($to); $i++) {
          fputs($smtpConnection, "RCPT TO:<$to[$i]>\r\n");
-         $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-         errorCheck($tmp);
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
       }
       for ($i = 0; $i < count($cc); $i++) {
          fputs($smtpConnection, "RCPT TO:<$cc[$i]>\r\n");
-         $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-         errorCheck($tmp);
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
       }
       for ($i = 0; $i < count($bcc); $i++) {
          fputs($smtpConnection, "RCPT TO:<$bcc[$i]>\r\n");
-         $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-         errorCheck($tmp);
+         $tmp = fgets($smtpConnection, 1024);
+         errorCheck($tmp, $smtpConnection);
       }
 
       /** Lets start sending the actual message */
       fputs($smtpConnection, "DATA\r\n");
-      $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-      errorCheck($tmp);
+      $tmp = fgets($smtpConnection, 1024);
+      errorCheck($tmp, $smtpConnection);
 
       // Send the message
       $headerlength = write822Header ($smtpConnection, $t, $c, $b, $subject, $more_headers);
       $bodylength = writeBody($smtpConnection, $body);
 
       fputs($smtpConnection, ".\r\n"); // end the DATA part
-      $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024)));
-      $num = errorCheck($tmp);
+      $tmp = fgets($smtpConnection, 1024);
+      $num = errorCheck($tmp, $smtpConnection);
       if ($num != 250) {
+        $tmp = nl2br(htmlspecialchars($tmp));
          echo "ERROR<BR>Message not sent!<BR>Reason given: $tmp<BR></BODY></HTML>";
       }
 
    }
 
 
-   function errorCheck($line) {
+   function errorCheck($line, $smtpConnection) {
+      global $page_header_php;
       global $color;
+      if (!isset($page_header_php)) {
+         include "../functions/page_header.php";
+      }
+      
+      // Read new lines on a multiline response
+      $lines = $line;
+      while(ereg("^[0-9]+-", $line)) {
+        $line = fgets($smtpConnection, 1024);
+        $lines .= $line;
+      }
+
       // Status:  0 = fatal
       //          5 = ok
 
          case 554:   $message = "Transaction failed";
                      $status = 0;
                      break;
-         default:    $message = "Unknown response: $line";
+         default:    $message = "Unknown response: ". nl2br(htmlspecialchars($lines));
                      $status = 0;
                      $error_num = "001";
                      break;
       }
 
       if ($status == 0) {
-         echo "<HTML><BODY BGCOLOR=#ffffff>";
+         displayPageHeader($color, "None");
          echo "<TT>";
-         echo "<BR><B>ERROR</B><BR><BR>";
+         echo "<br><b><font color=\"$color[1]\">ERROR</font></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>";
+         $lines = nl2br(htmlspecialchars($lines));
+         echo "<B>Server Response: </B>$lines<BR>";
          echo "<BR>MAIL NOT SENT";
          echo "</TT></BODY></HTML>";
          exit;
          writeBody ($imap_stream, $body); 
          sqimap_append_done ($imap_stream);
       }   
-
+      sqimap_logout($imap_stream); 
       // Delete the files uploaded for attaching (if any).
       deleteAttachments();
    }