fixed login problems
[squirrelmail.git] / functions / smtp.php
index 5a71dc516360120dd72e079ebf1755a6d920b009..7beb63ce452460b64e2ad5abdad44f42bbb5deb0 100644 (file)
@@ -5,9 +5,7 @@
     ** an smtp server or sendmail.
     **/
 
-
-   /* These next 2 functions are stub functions for implementations of 
-      attachments */
+   $smtp_php = true;
 
    // Returns true only if this message is multipart
    function isMultipart () {
 
    // Attach the files that are due to be attached
    function attachFiles ($fp) {
-      global $attachments;
+      global $attachments, $attachment_dir;
 
       while (list($localname, $remotename) = each($attachments)) {
-         $fileinfo = fopen ($localname.".info", "r");
+         // This is to make sure noone is giving a filename in another
+         // directory
+         $localname = ereg_replace ("\\/", "", $localname);
+
+         $fileinfo = fopen ($attachment_dir.$localname.".info", "r");
          $filetype = fgets ($fileinfo, 8192);
          fclose ($fileinfo);
          $filetype = trim ($filetype);
          fputs ($fp, "Content-Disposition: attachment; filename=\"$remotename\"\n");
          fputs ($fp, "Content-Transfer-Encoding: base64\n\n");
 
-         $file = fopen ($localname, "r");
+         $file = fopen ($attachment_dir.$localname, "r");
          while ($tmp = fread($file, 57))
             fputs ($fp, chunk_split(base64_encode($tmp)));
          fclose ($file);
 
-         unlink ($localname);
-         unlink ($localname.".info");
+         unlink ($attachment_dir.$localname);
+         unlink ($attachment_dir.$localname.".info");
       }
    }
 
       return $mimeBoundaryString;
    }
 
+   /* Time offset for correct timezone */
+   function timezone () {
+      $diff_second = date("Z");
+      if ($diff_second > 0)
+         $sign = "+";
+      else
+         $sign = "-";
+
+      $diff_second = abs($diff_second);
+
+      $diff_hour = floor ($diff_second / 3600);
+      $diff_minute = floor (($diff_second-3600*$diff_hour) / 60);
+
+      $zonename = "(".strftime("%Z").")";
+      $result = sprintf ("%s%02d%02d %s", $sign, $diff_hour, $diff_minute, $zonename);
+      return ($result);
+   }
+
    /* Print all the needed RFC822 headers */
    function write822Header ($fp, $t, $c, $b, $subject) {
       global $REMOTE_ADDR, $SERVER_NAME;
       $to = parseAddrs($t);
       $cc = parseAddrs($c);
       $bcc = parseAddrs($b);
-      $from_addr = "$username@$domain";
       $reply_to = getPref($data_dir, $username, "reply_to");
       $from = getPref($data_dir, $username, "full_name");
+      $from_addr = getPref($data_dir, $username, "email_address");
+
+      if ($from_addr == "")
+         $from_addr = "$username@$domain";
 
       $to_list = getLineOfAddrs($to);
       $cc_list = getLineOfAddrs($cc);
          $from = $from . " <$from_addr>";
 
       /* This creates an RFC 822 date showing GMT */
-      $date = date("D, j M Y H:i:s +0000", gmmktime());
+      $date = date("D, j M Y H:i:s ", mktime()) . timezone();
 
       /* Make an RFC822 Received: line */
       fputs ($fp, "Received: from $REMOTE_ADDR by $SERVER_NAME with HTTP; ");
         fputs ($fp, "--".mimeBoundary()."\n");
         fputs ($fp, "Content-Type: text/plain; charset=ISO-8859-1\n");
         fputs ($fp, "Content-Transfer-Encoding: 8bit\n\n");
-        fputs ($fp, "$body\n");
+        fputs ($fp, stripslashes($body) . "\n");
         attachFiles($fp);
         fputs ($fp, "\n--".mimeBoundary()."--\n");
      } else {
-       fputs ($fp, "$body\n");
+       fputs ($fp, stripslashes($body) . "\n");
      }
    }
 
       global $sendmail_path, $username, $domain;
       
       // open pipe to sendmail
-      $fp = popen (escapeshellcmd("$sendmail_path -t -f$username@$domain"), "w");
+      $fp = popen (escapeshellcmd("$sendmail_path -odb -oi -t -f$username@$domain"), "w");
       
       write822Header ($fp, $t, $c, $b, $subject);
       writeBody($fp, $body);
    }
 
    function sendSMTP($t, $c, $b, $subject, $body) {
-      global $username, $domain, $version, $smtpServerAddress, $smtpPort;
+      global $username, $domain, $version, $smtpServerAddress, $smtpPort,
+         $data_dir;
 
       $to = parseAddrs($t);
       $cc = parseAddrs($c);
       $bcc = parseAddrs($b);
-      $from_addr = "$username@$domain";
+      $from_addr = getPref($data_dir, $username, "email_address");
+
+      if ($from_addr == "")
+         $from_addr = "$username@$domain";
 
       $smtpConnection = fsockopen($smtpServerAddress, $smtpPort, $errorNumber, $errorString);
       if (!$smtpConnection) {