summaryrefslogtreecommitdiff
path: root/program/include/rcube_smtp.php
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2010-02-09 13:10:12 +0000
committeralecpl <alec@alec.pl>2010-02-09 13:10:12 +0000
commit91790e41f3fa307658077043bc2fa5f71e270cf4 (patch)
tree9864a79c0524eb064c2d07b78180394d5d9c9adf /program/include/rcube_smtp.php
parent5c54cc0ee6de44960bbc4cfab3d456a4805a0692 (diff)
- Fix attachment excessive memory use, support messages of any size (#1484660)
Diffstat (limited to 'program/include/rcube_smtp.php')
-rw-r--r--program/include/rcube_smtp.php28
1 files changed, 18 insertions, 10 deletions
diff --git a/program/include/rcube_smtp.php b/program/include/rcube_smtp.php
index 92534688d..299126267 100644
--- a/program/include/rcube_smtp.php
+++ b/program/include/rcube_smtp.php
@@ -141,7 +141,8 @@ class rcube_smtp {
* 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 @@ class rcube_smtp {
}
}
- // 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";