From df15de21eac46d62ab4a32127f7d7c74a8317361 Mon Sep 17 00:00:00 2001 From: gustavf Date: Fri, 28 Jan 2000 12:25:24 +0000 Subject: [PATCH] Restructured code for sending. compose_send.php is no longer used. Made a framework for sending attachments. git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@184 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/smtp.php | 95 +++++++++-- src/compose.php | 391 ++++++++++++++++++++++++++------------------- 2 files changed, 304 insertions(+), 182 deletions(-) diff --git a/functions/smtp.php b/functions/smtp.php index 9ca00918..259b698e 100644 --- a/functions/smtp.php +++ b/functions/smtp.php @@ -5,20 +5,38 @@ ** an smtp server or sendmail. **/ - function sendMessage($t, $c, $b, $subject, $body) { - global $useSendmail; - if ($useSendmail==true) { - sendSendmail($t, $c, $b, $subject, $body); - } else { - sendSMTP($t, $c, $b, $subject, $body); + /* These next 2 functions are stub functions for implementations of + attachments */ + + // Returns true only if this message is multipart + function isMultipart () { + return true; + } + + // Attach the files that are due to be attached + function attachFile ($fp) { + return false; + } + + // Return a nice MIME-boundary + function mimeBoundary () { + global $mimeBoundaryString, $version, $REMOTE_ADDR, $SERVER_NAME, + $REMOTE_PORT; + + if ($mimeBoundaryString == "") { + $temp = "SquirrelMail".$version.$REMOTE_ADDR.$SERVER_NAME. + $REMOTE_PORT; + $mimeBoundaryString = "=-=_=-SqMB.".substr(md5($temp),1,15); } - + + return $mimeBoundaryString; } + /* Print all the needed RFC822 headers */ function write822Header ($fp, $t, $c, $b, $subject) { global $REMOTE_ADDR, $SERVER_NAME; - global $data_dir, $username, $domain, $version; + global $data_dir, $username, $domain, $version, $useSendmail; $to = parseAddrs($t); $cc = parseAddrs($c); @@ -36,12 +54,14 @@ else $from = $from . " <$from_addr>"; + /* This creates an RFC 822 date showing GMT */ $date = date("D, j M Y H:i:s +0000", gmmktime()); - /* Make a RFC822 Received: line */ + /* Make an RFC822 Received: line */ fputs ($fp, "Received: from $REMOTE_ADDR by $SERVER_NAME with HTTP; "); fputs ($fp, "$date\n"); + /* The rest of the header */ fputs ($fp, "Date: $date\n"); fputs ($fp, "Subject: $subject\n"); // Subject fputs ($fp, "From: $from\n"); // Subject @@ -50,14 +70,43 @@ if ($cc_list) { fputs($fp, "Cc: $cc_list\n"); // Who the CCs are } - if ($bcc_list) { - fputs($fp, "Bcc: $bcc_list\n"); // BCCs is removed from header by sendmail + + if ($reply_to != "") + fputs($fp, "Reply-To: $reply_to\n"); + + if ($useSendmail) { + if ($bcc_list) { + // BCCs is removed from header by sendmail + fputs($fp, "Bcc: $bcc_list\n"); + } } + fputs($fp, "X-Mailer: SquirrelMail (version $version)\n"); // Identify SquirrelMail + + // Do the MIME-stuff fputs($fp, "MIME-Version: 1.0\n"); - fputs($fp, "Content-Type: text/plain\n"); - if ($reply_to != "") - fputs($fp, "Reply-To: $reply_to\n"); + + if (isMultipart()) { + fputs ($fp, "Content-Type: multipart/mixed; boundary=\""); + fputs ($fp, mimeBoundary()); + fputs ($fp, "\"\n"); + } else { + fputs($fp, "Content-Type: text/plain; charset=ISO-8859-1\n"); + fputs($fp, "Content-Transfer-Encoding: 8bit\n"); + } + } + + // Send the body + function writeBody ($fp, $body) { + if (isMultipart()) { + 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, "\n--".mimeBoundary()."--\n"); + } else { + fputs ($fp, "$body\n"); + } } // Send mail using the sendmail command @@ -65,10 +114,10 @@ global $sendmail_path, $username, $domain; // open pipe to sendmail - $fp = popen ("$sendmail_path -t -f$username@$domain", "w"); + $fp = popen (escapeshellcmd("$sendmail_path -t -f$username@$domain"), "w"); write822Header ($fp, $t, $c, $b, $subject); - fputs($fp, "\n$body\n"); // send the body of the message + writeBody($fp, $body); pclose($fp); } @@ -138,7 +187,7 @@ write822Header ($smtpConnection, $t, $c, $b, $subject); - fputs($smtpConnection, "$body\n"); // send the body of the message + writeBody($smtpConnection, $body); // send the body of the message fputs($smtpConnection, ".\n"); // end the DATA part $tmp = nl2br(htmlspecialchars(fgets($smtpConnection, 1024))); @@ -247,4 +296,16 @@ } return $err_num; } + + function sendMessage($t, $c, $b, $subject, $body) { + global $useSendmail; + + if ($useSendmail==true) { + sendSendmail($t, $c, $b, $subject, $body); + } else { + sendSMTP($t, $c, $b, $subject, $body); + } + + } + ?> diff --git a/src/compose.php b/src/compose.php index e13c8a25..1ba81ee2 100644 --- a/src/compose.php +++ b/src/compose.php @@ -1,4 +1,12 @@ $tmp\n"; } } + + // Add some decoding information + $send_to = encodeEmailAddr($send_to); + // parses the field and returns only the email address + $send_to = decodeEmailAddr($send_to); + + $send_to = strtolower($send_to); + $send_to = ereg_replace("\"", "", $send_to); + $send_to = stripslashes($send_to); + + /** This formats a CC string if they hit "reply all" **/ + if ($send_to_cc != "") { + $send_to_cc = ereg_replace(";", ",", $send_to_cc); + $sendcc = explode(",", $send_to_cc); + $send_to_cc = ""; + + for ($i = 0; $i < count($sendcc); $i++) { + $sendcc[$i] = trim($sendcc[$i]); + if ($sendcc[$i] == "") + continue; + + $sendcc[$i] = encodeEmailAddr($sendcc[$i]); + $sendcc[$i] = decodeEmailAddr($sendcc[$i]); + + $whofrom = encodeEmailAddr($msg["HEADER"]["FROM"]); + $whofrom = decodeEmailAddr($whofrom); + + $whoreplyto = encodeEmailAddr($msg["HEADER"]["REPLYTO"]); + $whoreplyto = decodeEmailAddr($whoreplyto); + + if ((strtolower(trim($sendcc[$i])) != strtolower(trim($whofrom))) && + (strtolower(trim($sendcc[$i])) != strtolower(trim($whoreplyto))) && + (trim($sendcc[$i]) != "")) { + $send_to_cc .= trim($sendcc[$i]) . ", "; + } + } + $send_to_cc = trim($send_to_cc); + if (substr($send_to_cc, -1) == ",") { + $send_to_cc = substr($send_to_cc, 0, strlen($send_to_cc) - 1); + } + } + } // function newMail() - $type1 = $msg["ENTITIES"][$ent_num]["TYPE1"]; + function showInputForm () { + global $send_to, $send_to_cc, $reply_subj, $forward_subj, $body, + $passed_body, $color, $use_signature, $signature, $editor_size; - $body_ary = explode("\n", $body); - $body = ""; - for ($i=0;$i < count($body_ary);$i++) { - if ($type1 == "html") - $tmp = strip_tags($body_ary[$i]); - else - $tmp = $body_ary[$i]; - $body = "$body> $tmp\n"; + echo "\n
\n"; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + echo " "; + echo _("To:"); + echo " \n"; + echo " \n"; + if ($send_to) + echo "
"; + else + echo "
"; + echo "
\n"; + echo " CC:\n"; + echo " \n"; + if ($send_to_cc) + echo "
"; + else + echo "
"; + echo "
\n"; + echo " BCC:\n"; + echo " \n"; + if ($send_to_bcc) + echo "
"; + else + echo "
"; + echo "
\n"; + echo " "; + echo _("Subject:"); + echo " \n"; + echo " \n"; + if ($reply_subj) { + $reply_subj = str_replace("\"", "'", $reply_subj); + $reply_subj = stripslashes($reply_subj); + $reply_subj = trim($reply_subj); + if (substr(strtolower($reply_subj), 0, 3) != "re:") + $reply_subj = "Re: $reply_subj"; + echo " "; + } else if ($forward_subj) { + $forward_subj = str_replace("\"", "'", $forward_subj); + $forward_subj = stripslashes($forward_subj); + $forward_subj = trim($forward_subj); + if ((substr(strtolower($forward_subj), 0, 4) != "fwd:") && + (substr(strtolower($forward_subj), 0, 5) != "[fwd:") && + (substr(strtolower($forward_subj), 0, 6) != "[ fwd:")) + $forward_subj = "[Fwd: $forward_subj]"; + echo " "; + } else { + echo " "; } + echo "   
\n"; + echo "
\n"; + if ($use_signature == true) + echo "   
"; + else + echo "   
\n"; + echo "
\n"; + echo "
"; + echo "
"; } - // Add some decoding information - $send_to = encodeEmailAddr($send_to); - // parses the field and returns only the email address - $send_to = decodeEmailAddr($send_to); - - $send_to = strtolower($send_to); - $send_to = ereg_replace("\"", "", $send_to); - $send_to = stripslashes($send_to); - - /** This formats a CC string if they hit "reply all" **/ - if ($send_to_cc != "") { - $send_to_cc = ereg_replace(";", ",", $send_to_cc); - $sendcc = explode(",", $send_to_cc); - $send_to_cc = ""; - - for ($i = 0; $i < count($sendcc); $i++) { - $sendcc[$i] = trim($sendcc[$i]); - if ($sendcc[$i] == "") - continue; - - $sendcc[$i] = encodeEmailAddr($sendcc[$i]); - $sendcc[$i] = decodeEmailAddr($sendcc[$i]); - - $whofrom = encodeEmailAddr($msg["HEADER"]["FROM"]); - $whofrom = decodeEmailAddr($whofrom); + function showSentForm () { + echo ""; + echo "


Message Sent!

"; + echo "You will be automatically forwarded.
If not, click here"; + echo "
"; + } - $whoreplyto = encodeEmailAddr($msg["HEADER"]["REPLYTO"]); - $whoreplyto = decodeEmailAddr($whoreplyto); + function checkInput () { + global $body, $send_to, $subject; - if ((strtolower(trim($sendcc[$i])) != strtolower(trim($whofrom))) && - (strtolower(trim($sendcc[$i])) != strtolower(trim($whoreplyto))) && - (trim($sendcc[$i]) != "")) { - $send_to_cc .= trim($sendcc[$i]) . ", "; - } + if ($body == "") { + plain_error_message("You have not entered a message body.", $color); + return false; + } else if ($send_to == "") { + displayPageHeader($color, "None"); + plain_error_message("You have not filled in the \"To:\" field.", $color); + return false; + } else if ($subject == "") { + plain_error_message("You have not entered a subject.", $color); + return false; } - $send_to_cc = trim($send_to_cc); - if (substr($send_to_cc, -1) == ",") { - $send_to_cc = substr($send_to_cc, 0, strlen($send_to_cc) - 1); + return true; + } // function checkInput() + + if (!isset($send)) { + newMail(); + showInputForm(); + } else if(isset($send)) { + if (checkInput()) { + sendMessage($send_to, $send_to_cc, $send_to_bcc, $subject, $body); + showSentForm(); + } else { + showInputForm(); } } - echo "
\n"; - echo "\n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo " "; - echo " \n"; - echo "
\n"; - echo " "; - echo _("To:"); - echo " \n"; - echo " \n"; - if ($send_to) - echo "
"; - else - echo "
"; - echo "
\n"; - echo " CC:\n"; - echo " \n"; - if ($send_to_cc) - echo "
"; - else - echo "
"; - echo "
\n"; - echo " BCC:\n"; - echo " \n"; - echo "
"; - echo "
\n"; - echo " "; - echo _("Subject:"); - echo " \n"; - echo " \n"; - if ($reply_subj) { - $reply_subj = str_replace("\"", "'", $reply_subj); - $reply_subj = stripslashes($reply_subj); - $reply_subj = trim($reply_subj); - if (substr(strtolower($reply_subj), 0, 3) != "re:") - $reply_subj = "Re: $reply_subj"; - echo " "; - } else if ($forward_subj) { - $forward_subj = str_replace("\"", "'", $forward_subj); - $forward_subj = stripslashes($forward_subj); - $forward_subj = trim($forward_subj); - if ((substr(strtolower($forward_subj), 0, 4) != "fwd:") && - (substr(strtolower($forward_subj), 0, 5) != "[fwd:") && - (substr(strtolower($forward_subj), 0, 6) != "[ fwd:")) - $forward_subj = "[Fwd: $forward_subj]"; - echo " "; - } else { - echo " "; - } - echo "  
"; - echo "
\n"; - if ($use_signature == true) - echo "   
"; - else - echo "   
"; - echo "
\n"; - echo "
"; - echo "
"; ?> -- 2.25.1