/** msg_header contains generic variables for values that **/
/** could be in a header. **/
- var $type0, $type1, $boundary, $charset, $encoding;
+ var $type0, $type1, $boundary, $charset, $encoding, $size;
var $to, $from, $date, $cc, $bcc, $reply_to, $subject;
var $id, $mailbox, $description;
var $entity_id, $message_id, $charset;
if (!$ent_id) $ent_id = 1;
fputs ($imap_stream, "a001 FETCH $id BODY[$ent_id]\r\n");
- $topline = fgets ($imap_stream, 1024);
- $size = substr ($topline, strpos($topline, "{")+1);
- $size = substr ($size, 0, strpos($size, "}"));
- $read = fread ($imap_stream, $size);
- return $read;
+ $data = sqimap_read_data ($imap_stream, 'a001', true, $response, $message);
+ $topline = array_shift($data);
+ while (! ereg('\* [0-9]+ FETCH ', $topline) && data)
+ $topline = array_shift($data);
+ $wholemessage = implode('', $data);
+
+ if (ereg('\{([^\}]*)\}', $topline, $regs)) {
+ return substr($wholemessage, 0, $regs[1]);
+ }
+ else if (ereg('"([^"]*)"', $topline, $regs)) {
+ return $regs[1];
+ }
+
+ $str = "Body retrival error. Please report this bug!\n";
+ $str .= "Response: $response\n";
+ $str .= "Message: $message\n";
+ $str .= "FETCH line: $topline";
+ $str .= "---------------\n$wholemessage";
+ foreach ($data as $d)
+ {
+ $str .= htmlspecialchars($d) . "\n";
+ }
+ return $str;
+
+ return "Body retrival error, please report this bug!\n\nTop line is \"$topline\"\n";
}
/* -[ END MIME DECODING ]----------------------------------------------------------- */
// If there are other types that shouldn't be formatted, add
// them here
- if ($message->header->type1 != "html") {
- $body = translateText($body, $wrap_at, $body_message->header->charset);
+ if ($body_message->header->type1 != "html") {
+ translateText($body, $wrap_at, $body_message->header->charset);
}
$body .= "<SMALL><CENTER><A HREF=\"../src/download.php?absolute_dl=true&passed_id=$id&passed_ent_id=$ent_num&mailbox=$urlmailbox\">". _("Download this as a file") ."</A></CENTER><BR></SMALL>";
/** Display the ATTACHMENTS: message if there's more than one part **/
+ $body .= "</TD></TR></TABLE>";
if ($message->entities) {
- $body .= "</TD></TR></TABLE>";
- $body .= "<TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=4 BORDER=0><TR><TD BGCOLOR=\"$color[0]\">";
- $body .= "<TT><B>ATTACHMENTS:</B></TT>";
- $body .= "</TD></TR><TR><TD BGCOLOR=\"$color[0]\">";
- $num = 0;
-
$body .= formatAttachments ($message, $ent_num, $message->header->mailbox, $id);
- $body .= "</TD></TR></TABLE>";
- } else {
- $body .= "</TD></TR></TABLE>";
}
} else {
- $body .= "</TD></TR></TABLE>";
- $body .= "<TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=4 BORDER=0><TR><TD BGCOLOR=\"$color[0]\">";
- $body .= "<TT><B>ATTACHMENTS:</B></TT>";
- $body .= "</TD></TR><TR><TD BGCOLOR=\"$color[0]\">";
- $num = 0;
-
- $body .= formatAttachments ($message, 999999, $message->header->mailbox, $id);
- $body .= "</TD></TR></TABLE>";
+ $body .= formatAttachments ($message, -1, $message->header->mailbox, $id);
}
return $body;
}
// to where to download these attachments
function formatAttachments ($message, $ent_id, $mailbox, $id) {
global $where, $what;
- global $startMessage;
+ global $startMessage, $color;
+ static $ShownHTML;
+
+ if ($ShownHTML == 0)
+ {
+ $ShownHTML = 1;
+
+ $body .= "<TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=2 BORDER=0 BGCOLOR=\"$color[0]\"><TR>\n";
+ $body .= "<TH ALIGN=\"left\" BGCOLOR=\"$color[9]\"><B>\n";
+ $body .= _('Attachments') . ':';
+ $body .= "</B></TH></TR><TR><TD>\n";
+
+ $body .= "<TABLE CELLSPACING=0 CELLPADDING=1 BORDER=0>\n";
+
+ $body .= formatAttachments ($message, $ent_id, $mailbox, $id);
+
+ $body .= "</TABLE></TD></TR></TABLE>";
+
+ return $body;
+ }
+
if ($message) {
if (!$message->entities) {
$type0 = strtolower($message->header->type0);
$urlMailbox = urlencode($mailbox);
$ent = urlencode($message->header->entity_id);
- if ($where && $what) {
- // from a search
- $body .= "<TT> <A HREF=\"../src/download.php?startMessage=$startMessage&where=".urlencode($where)."&what=".urlencode($what)."&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent\">" . $display_filename . "</A> (TYPE: $type0/$type1)";
- } else {
- $body .= "<TT> <A HREF=\"../src/download.php?startMessage=$startMessage&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent\">" . $display_filename . "</A> (TYPE: $type0/$type1)";
- }
+
+ $DefaultLink =
+ "../src/download.php?startMessage=$startMessage&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent";
+ if ($where && $what)
+ $DefaultLink .= '&where=' . urlencode($where) . '&what=' . urlencode($what);
+ $Links['download link']['text'] = _('download');
+ $Links['download link']['href'] =
+ "../src/download.php?absolute_dl=true&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent";
+ $ImageURL = '';
+
+ $HookResults = do_hook("attachment $type0/$type1", $Links,
+ $startMessage, $id, $urlMailbox, $ent, $DefaultLink,
+ $display_filename, $where, $what);
+
+ $Links = $HookResults[1];
+ $DefaultLink = $HookResults[6];
+
+ $body .= '<TR><TD> </TD><TD>';
+ $body .= "<A HREF=\"$DefaultLink\">$display_filename</A> </TD>";
+ $body .= '<TD><SMALL><b>' . show_readable_size($message->header->size) .
+ '</b> </small></TD>';
+ $body .= "<TD><SMALL>[ $type0/$type1 ] </SMALL></TD>";
+ $body .= '<TD><SMALL>';
if ($message->header->description)
- $body .= " <b>" . htmlspecialchars($message->header->description)."</b>";
- $body .= " (<a href=\"../src/download.php?absolute_dl=true&passed_id=$id&mailbox=$urlMailbox&passed_ent_id=$ent\">"._("download")."</a>)\n";
- do_hook("attachment $type0/$type1");
- $body .= "</TT><BR>";
- $num++;
+ $body .= '<b>' . htmlspecialchars($message->header->description) . '</b>';
+ $body .= '</SMALL></TD><TD><SMALL> ';
+
+
+ $SkipSpaces = 1;
+ foreach ($Links as $Val)
+ {
+ if ($SkipSpaces)
+ {
+ $SkipSpaces = 0;
+ }
+ else
+ {
+ $body .= ' | ';
+ }
+ $body .= '<a href="' . $Val['href'] . '">' . $Val['text'] . '</a>';
+ }
+
+ unset($Links);
+
+ $body .= "</SMALL></TD></TR>\n";
}
return $body;
} else {
$replace = ereg_replace("_", " ", $res[3]);
// Convert lowercase Quoted Printable to uppercase for
// quoted_printable_decode to understand it.
- while (ereg("(=([0-9][a-f])|([a-f][0-9])|([a-f][0-9]))", $replace, $res)) {
+ while (ereg("(=([0-9][abcdef])|([abcdef][0-9])|([abcdef][abcdef]))", $replace, $res)) {
$replace = str_replace($res[1], strtoupper($res[1]), $replace);
}
$replace = quoted_printable_decode($replace);
global $default_charset;
// Encode only if the string contains 8-bit characters or =?
- if (ereg("([\200-\377])|=\\?", $string)) {
+ if (ereg("([\200-\377]|=\\?)", $string)) {
$newstring = "=?$default_charset?Q?";
// First the special characters
$string = str_replace("_", "=5F", $string);
$string = str_replace(" ", "_", $string);
-
- while (ereg("([\200-\377])", $string, $regs)) {
- $replace = $regs[1];
- $insert = "=" . strtoupper(bin2hex($replace));
+ for ( $ch = 127 ; $ch <= 255 ; $ch++ ) {
+ $replace = chr($ch);
+ $insert = sprintf("=%02X", $ch);
$string = str_replace($replace, $insert, $string);
+ $ch++;
}
$newstring = "=?$default_charset?Q?".$string."?=";