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