Aleksander Machniak
2012-12-09 4f1c887eaaadcc2b6ab2c6578481991698ea74a3
Add support for IMAP BINARY (RFC3516)
2 files modified
33 ■■■■■ changed files
program/lib/Roundcube/rcube_imap.php 7 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap_generic.php 26 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap.php
@@ -2226,10 +2226,11 @@
     * @param boolean $is_file True if $message is a filename
     * @param array   $flags   Message flags
     * @param mixed   $date    Message internal date
     * @param bool    $binary  Enables BINARY append
     *
     * @return int|bool Appended message UID or True on success, False on error
     */
    public function save_message($folder, &$message, $headers='', $is_file=false, $flags = array(), $date = null)
    public function save_message($folder, &$message, $headers='', $is_file=false, $flags = array(), $date = null, $binary = false)
    {
        if (!strlen($folder)) {
            $folder = $this->folder;
@@ -2247,10 +2248,10 @@
        $date = $this->date_format($date);
        if ($is_file) {
            $saved = $this->conn->appendFromFile($folder, $message, $headers, $flags, $date);
            $saved = $this->conn->appendFromFile($folder, $message, $headers, $flags, $date, $binary);
        }
        else {
            $saved = $this->conn->append($folder, $message, $flags, $date);
            $saved = $this->conn->append($folder, $message, $flags, $date, $binary);
        }
        if ($saved) {
program/lib/Roundcube/rcube_imap_generic.php
@@ -2548,10 +2548,11 @@
     * @param string $message Message content
     * @param array  $flags   Message flags
     * @param string $date    Message internal date
     * @param bool   $binary  Enable BINARY append (RFC3516)
     *
     * @return string|bool On success APPENDUID response (if available) or True, False on failure
     */
    function append($mailbox, &$message, $flags = array(), $date = null)
    function append($mailbox, &$message, $flags = array(), $date = null, $binary = false)
    {
        unset($this->data['APPENDUID']);
@@ -2559,8 +2560,13 @@
            return false;
        }
        $message = str_replace("\r", '', $message);
        $message = str_replace("\n", "\r\n", $message);
        $binary       = $binary && $this->getCapability('BINARY');
        $literal_plus = !$binary && $this->prefs['literal+'];
        if (!$binary) {
            $message = str_replace("\r", '', $message);
            $message = str_replace("\n", "\r\n", $message);
        }
        $len = strlen($message);
        if (!$len) {
@@ -2573,12 +2579,12 @@
        if (!empty($date)) {
            $request .= ' ' . $this->escape($date);
        }
        $request .= ' {' . $len . ($this->prefs['literal+'] ? '+' : '') . '}';
        $request .= ' ' . ($binary ? '~' : '') . '{' . $len . ($literal_plus ? '+' : '') . '}';
        // send APPEND command
        if ($this->putLine($request)) {
            // Do not wait when LITERAL+ is supported
            if (!$this->prefs['literal+']) {
            if (!$literal_plus) {
                $line = $this->readReply();
                if ($line[0] != '+') {
@@ -2620,10 +2626,11 @@
     * @param string $headers Message headers
     * @param array  $flags   Message flags
     * @param string $date    Message internal date
     * @param bool   $binary  Enable BINARY append (RFC3516)
     *
     * @return string|bool On success APPENDUID response (if available) or True, False on failure
     */
    function appendFromFile($mailbox, $path, $headers=null, $flags = array(), $date = null)
    function appendFromFile($mailbox, $path, $headers=null, $flags = array(), $date = null, $binary = false)
    {
        unset($this->data['APPENDUID']);
@@ -2654,18 +2661,21 @@
            $len += strlen($headers) + strlen($body_separator);
        }
        $binary       = $binary && $this->getCapability('BINARY');
        $literal_plus = !$binary && $this->prefs['literal+'];
        // build APPEND command
        $key = $this->nextTag();
        $request = "$key APPEND " . $this->escape($mailbox) . ' (' . $this->flagsToStr($flags) . ')';
        if (!empty($date)) {
            $request .= ' ' . $this->escape($date);
        }
        $request .= ' {' . $len . ($this->prefs['literal+'] ? '+' : '') . '}';
        $request .= ' ' . ($binary ? '~' : '') . '{' . $len . ($literal_plus ? '+' : '') . '}';
        // send APPEND command
        if ($this->putLine($request)) {
            // Don't wait when LITERAL+ is supported
            if (!$this->prefs['literal+']) {
            if (!$literal_plus) {
                $line = $this->readReply();
                if ($line[0] != '+') {