}
/* Returns true only if this message is multipart */
-function isMultipart () {
+function isMultipart ($session) {
global $attachments;
-
- if (count($attachments)>0) {
- return true;
- }
- else {
- return false;
+
+ foreach ($attachments as $info) {
+ if ($info['session'] == $session) {
+ return true;
+ }
}
+ return false;
}
/* looks up aliases in the addressbook and expands them to
/* don't show errors -- kinda critical that we don't see
* them here since the redirect won't work if we do show them
*/
- $abook = addressbook_init(false);
+ $abook = addressbook_init(false, true);
for ($i=0; $i < count($array); $i++) {
$result = $abook->lookup($array[$i]);
$ret = "";
/* don't show errors -- kinda critical that we don't see
* them here since the redirect won't work if we do show them
*/
- $abook = addressbook_init(false);
+ $abook = addressbook_init(false, true);
for ($i=0; $i < count($array); $i++) {
$result = $abook->lookup($array[$i]);
$ret = "";
/* Attach the files that are due to be attached
*/
-function attachFiles ($fp) {
+function attachFiles ($fp, $session) {
global $attachments, $attachment_dir, $username;
$length = 0;
$hashed_attachment_dir = getHashedDir($username, $attachment_dir);
- if (isMultipart()) {
+ if (isMultipart($session)) {
foreach ($attachments as $info) {
+ if ($info['session'] == $session) {
if (isset($info['type'])) {
$filetype = $info['type'];
}
}
}
fclose ($file);
+ }
}
}
return $length;
/* Delete files that are uploaded for attaching
*/
-function deleteAttachments() {
- global $attachments, $attachment_dir;
-
+function deleteAttachments($session) {
+ global $username, $attachments, $attachment_dir;
$hashed_attachment_dir = getHashedDir($username, $attachment_dir);
- if (isMultipart()) {
- reset($attachments);
- while (list($localname, $remotename) = each($attachments)) {
- if (!ereg ("\\/", $localname)) {
- $filename = $hashed_attachment_dir . '/' . $localname;
- unlink ($filename);
- unlink ("$filename.info");
- }
- }
+
+ $rem_attachments = array();
+ foreach ($attachments as $info) {
+ if ($info['session'] == $session) {
+ $attached_file = "$hashed_attachment_dir/$info[localfilename]";
+ if (file_exists($attached_file)) {
+ unlink($attached_file);
+ }
+ } else {
+ $rem_attachments[] = $info;
+ }
}
+ $attachments = $rem_attachments;
}
/* Return a nice MIME-boundary
}
/* Print all the needed RFC822 headers */
-function write822Header ($fp, $t, $c, $b, $subject, $more_headers) {
+function write822Header ($fp, $t, $c, $b, $subject, $more_headers, $session) {
global $REMOTE_ADDR, $SERVER_NAME, $REMOTE_PORT;
global $data_dir, $username, $popuser, $domain, $version, $useSendmail;
global $default_charset, $HTTP_VIA, $HTTP_X_FORWARDED_FOR;
$HTTP_X_FORWARDED_FOR = 'unknown';
}
$received_from .= " (proxying for $HTTP_X_FORWARDED_FOR)";
- }
-
+ }
+
$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";
$header .= "Date: $date\r\n";
$header .= "Subject: $subject\r\n";
$header .= "From: $from\r\n";
$header .= "To: $to_list\r\n"; // Who it's TO
-
+
if (isset($more_headers["Content-Type"])) {
- $contentType = $more_headers["Content-Type"];
- unset($more_headers["Content-Type"]);
- }
+ $contentType = $more_headers["Content-Type"];
+ unset($more_headers["Content-Type"]);
+ }
else {
- if (isMultipart()) {
- $contentType = "multipart/mixed;";
- }
- else {
- if ($default_charset != '') {
- $contentType = 'text/plain; charset='.$default_charset;
+ if (isMultipart($session)) {
+ $contentType = "multipart/mixed;";
}
else {
- $contentType = 'text/plain;';
- }
- }
+ if ($default_charset != '') {
+ $contentType = 'text/plain; charset='.$default_charset;
+ }
+ else {
+ $contentType = 'text/plain;';
+ }
+ }
}
-
- /* Insert headers from the $more_headers array */
- if(is_array($more_headers)) {
+
+ /* Insert headers from the $more_headers array */
+ if(is_array($more_headers)) {
reset($more_headers);
while(list($h_name, $h_val) = each($more_headers)) {
$header .= sprintf("%s: %s\r\n", $h_name, $h_val);
}
}
-
+
if ($cc_list) {
$header .= "Cc: $cc_list\r\n"; // Who the CCs are
}
-
+
if ($reply_to != '') {
$header .= "Reply-To: $reply_to\r\n";
}
-
+
if ($useSendmail) {
if ($bcc_list) {
// BCCs is removed from header by sendmail
- $header .= "Bcc: $bcc_list\r\n";
+ $header .= "Bcc: $bcc_list\r\n";
}
}
-
+
$header .= "X-Mailer: SquirrelMail (version $version)\r\n"; /* Identify SquirrelMail */
/* Do the MIME-stuff */
$header .= "MIME-Version: 1.0\r\n";
-
- if (isMultipart()) {
+
+ if (isMultipart($session)) {
$header .= 'Content-Type: '.$contentType.' boundary="';
$header .= mimeBoundary();
$header .= "\"\r\n";
} else {
- $header .= 'Content-Type: '.$contentType."\r\n";
+ $header .= 'Content-Type: '.$contentType."\r\n";
$header .= "Content-Transfer-Encoding: 8bit\r\n";
}
$header .= "\r\n"; // One blank line to separate header and body
/* Send the body
*/
-function writeBody ($fp, $passedBody) {
+function writeBody ($fp, $passedBody, $session) {
global $default_charset;
$attachmentlength = 0;
- if (isMultipart()) {
+ if (isMultipart($session)) {
$body = '--'.mimeBoundary()."\r\n";
if ($default_charset != "") {
$body .= $passedBody . "\r\n\r\n";
fputs ($fp, $body);
- $attachmentlength = attachFiles($fp);
+ $attachmentlength = attachFiles($fp, $session);
if (!isset($postbody)) {
$postbody = "";
$postbody = "\r\n";
fputs ($fp, $postbody);
}
-
+
return (strlen($body) + strlen($postbody) + $attachmentlength);
}
/* Send mail using the sendmail command
*/
-function sendSendmail($t, $c, $b, $subject, $body, $more_headers) {
+function sendSendmail($t, $c, $b, $subject, $body, $more_headers, $session) {
global $sendmail_path, $popuser, $username, $domain;
/* Build envelope sender address. Make sure it doesn't contain
$fp = popen (escapeshellcmd("$sendmail_path -t -f$envelopefrom"), "w");
}
- $headerlength = write822Header ($fp, $t, $c, $b, $subject, $more_headers);
- $bodylength = writeBody($fp, $body);
+ $headerlength = write822Header ($fp, $t, $c, $b, $subject, $more_headers, $session);
+ $bodylength = writeBody($fp, $body, $session);
pclose($fp);
}
}
-function sendSMTP($t, $c, $b, $subject, $body, $more_headers) {
+function sendSMTP($t, $c, $b, $subject, $body, $more_headers, $session) {
global $username, $popuser, $domain, $version, $smtpServerAddress,
$smtpPort, $data_dir, $color, $use_authenticated_smtp, $identity,
$key, $onetimepad;
exit;
}
$tmp = fgets($smtpConnection, 1024);
- if (errorCheck($tmp, $smtpConnection)!=5) return(0);
+ if (errorCheck($tmp, $smtpConnection)!=5) {
+ return(0);
+ }
$to_list = getLineOfAddrs($to);
$cc_list = getLineOfAddrs($cc);
}
/* Send the message */
- $headerlength = write822Header ($smtpConnection, $t, $c, $b, $subject, $more_headers);
- $bodylength = writeBody($smtpConnection, $body);
+ $headerlength = write822Header ($smtpConnection, $t, $c, $b, $subject, $more_headers, $session);
+ $bodylength = writeBody($smtpConnection, $body, $session);
fputs($smtpConnection, ".\r\n"); /* end the DATA part */
$tmp = fgets($smtpConnection, 1024);
$num = errorCheck($tmp, $smtpConnection, true);
if ($num != 250) {
- $tmp = nl2br(htmlspecialchars($tmp));
- displayPageHeader($color, 'None');
- include_once('../functions/display_messages.php');
- $msg = "Message not sent!<br>\nReason given: $tmp";
- plain_error_message($msg, $color);
return(0);
}
function errorCheck($line, $smtpConnection, $verbose = false) {
- global $color;
+ global $color, $compose_new_win;
/* Read new lines on a multiline response */
$lines = $line;
$error_num = '001';
break;
}
-
+
if ($status == 0) {
include_once('../functions/page_header.php');
- displayPageHeader($color, 'None');
+ if ($compose_new_win == '1') {
+ compose_Header($color, 'None');
+ }
+ else {
+ displayPageHeader($color, 'None');
+ }
include_once('../functions/display_messages.php');
$lines = nl2br(htmlspecialchars($lines));
$msg = $message . "<br>\nServer replied: $lines";
return $err_num;
}
-function sendMessage($t, $c, $b, $subject, $body, $reply_id, $MDN, $prio = 3) {
+function sendMessage($t, $c, $b, $subject, $body, $reply_id, $MDN, $prio = 3, $session) {
global $useSendmail, $msg_id, $is_reply, $mailbox, $onetimepad,
$data_dir, $username, $domain, $key, $version, $sent_folder, $imapServerAddress,
$imapPort, $default_use_priority, $more_headers, $request_mdn, $request_dr;
}
if ($useSendmail) {
- $length = sendSendmail($t, $c, $b, $subject, $body, $more_headers);
+ $length = sendSendmail($t, $c, $b, $subject, $body, $more_headers, $session);
} else {
- $length = sendSMTP($t, $c, $b, $subject, $body, $more_headers);
+ $length = sendSMTP($t, $c, $b, $subject, $body, $more_headers, $session);
}
if (sqimap_mailbox_exists ($imap_stream, $sent_folder)) {
sqimap_append ($imap_stream, $sent_folder, $length);
- write822Header ($imap_stream, $t, $c, $b, $subject, $more_headers);
- writeBody ($imap_stream, $body);
+ write822Header ($imap_stream, $t, $c, $b, $subject, $more_headers, $session);
+ writeBody ($imap_stream, $body, $session);
sqimap_append_done ($imap_stream);
}
sqimap_logout($imap_stream);
* only if $length != 0 (if there was no error)
*/
if ($length) {
- ClearAttachments();
+ ClearAttachments($session);
}
return $length;