From dff2c713fbc5dd8a501a31f3c158b8be412f46d0 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Tue, 27 Nov 2012 10:22:49 -0500 Subject: [PATCH] Add argument to fetch message parts only partially. Can be used for content mimetype detection without loading the entire file --- program/lib/Roundcube/rcube_imap_generic.php | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/program/lib/Roundcube/rcube_imap_generic.php b/program/lib/Roundcube/rcube_imap_generic.php index a0a8f3b..70fd6eb 100644 --- a/program/lib/Roundcube/rcube_imap_generic.php +++ b/program/lib/Roundcube/rcube_imap_generic.php @@ -2379,7 +2379,7 @@ return $this->handlePartBody($mailbox, $id, $is_uid, $part); } - function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL, $formatted=false) + function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL, $formatted=false, $max_bytes=0) { if (!$this->select($mailbox)) { return false; @@ -2405,10 +2405,11 @@ // Use BINARY extension when possible (and safe) $binary = $mode && preg_match('/^[0-9.]+$/', $part) && $this->hasCapability('BINARY'); $fetch_mode = $binary ? 'BINARY' : 'BODY'; + $partial = $max_bytes ? sprintf('<0.%d>', $max_bytes) : ''; // format request $key = $this->nextTag(); - $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id ($fetch_mode.PEEK[$part])"; + $request = $key . ($is_uid ? ' UID' : '') . " FETCH $id ($fetch_mode.PEEK[$part]$partial)"; // send request if (!$this->putLine($request)) { @@ -2508,8 +2509,10 @@ $line = rtrim($line, "\t\r\n\0\x0B") . "\n"; } - if ($file) - fwrite($file, $line); + if ($file) { + if (fwrite($file, $line) === false) + break; + } else if ($print) echo $line; else @@ -2525,7 +2528,7 @@ if ($result !== false) { if ($file) { - fwrite($file, $result); + return fwrite($file, $result); } else if ($print) { echo $result; } else -- Gitblit v1.9.1