From 91790e41f3fa307658077043bc2fa5f71e270cf4 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 09 Feb 2010 08:10:12 -0500
Subject: [PATCH] - Fix attachment excessive memory use, support messages of any size (#1484660)
---
program/include/rcube_smtp.php | 28 ++++++++++++++++++----------
1 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/program/include/rcube_smtp.php b/program/include/rcube_smtp.php
index 9253468..2991262 100644
--- a/program/include/rcube_smtp.php
+++ b/program/include/rcube_smtp.php
@@ -141,7 +141,8 @@
* Either as an associative array or a finally
* formatted string
*
- * @param string The full text of the message body, including any Mime parts, etc.
+ * @param mixed The full text of the message body, including any Mime parts
+ * or file handle
*
* @return bool Returns true on success, or false on error
*/
@@ -206,17 +207,24 @@
}
}
- // Concatenate headers and body so it can be passed by reference to SMTP_CONN->data
- // so preg_replace in SMTP_CONN->quotedata will store a reference instead of a copy.
- // We are still forced to make another copy here for a couple ticks so we don't really
- // get to save a copy in the method call.
- $data = $text_headers . "\r\n" . $body;
+ if (is_resource($body))
+ {
+ // file handle
+ $data = $body;
+ $text_headers = preg_replace('/[\r\n]+$/', '', $text_headers);
+ } else {
+ // Concatenate headers and body so it can be passed by reference to SMTP_CONN->data
+ // so preg_replace in SMTP_CONN->quotedata will store a reference instead of a copy.
+ // We are still forced to make another copy here for a couple ticks so we don't really
+ // get to save a copy in the method call.
+ $data = $text_headers . "\r\n" . $body;
- // unset old vars to save data and so we can pass into SMTP_CONN->data by reference.
- unset($text_headers, $body);
-
+ // unset old vars to save data and so we can pass into SMTP_CONN->data by reference.
+ unset($text_headers, $body);
+ }
+
// Send the message's headers and the body as SMTP data.
- if (PEAR::isError($result = $this->conn->data($data)))
+ if (PEAR::isError($result = $this->conn->data($data, $text_headers)))
{
$this->error = array('label' => 'smtperror', 'vars' => array('msg' => $result->getMessage()));
$this->response[] .= "Failed to send data";
--
Gitblit v1.9.1