Your message dated Sun, 05 Sep 2010 09:09:27 +0000
with message-id <[email protected]>
and subject line Bug#595204: fixed in roundcube 0.3.1-5
has caused the Debian Bug report #595204,
regarding roundcube: Mail headers of RC are filtered as BAD HEADER by 
SpamAssassin
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
595204: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595204
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: roundcube
Version: 0.3.1-4
Severity: normal
Tags: patch


Hello,
After upgrade from roundcube 0.3.0 to 0.3.1 from de debian repo's, mail headers 
of mails with attachments and originating from RC are filtered as BAD-HEADER by 
SpamAssassin 
(Amavis). Mail is still passed on, though X-Amavis-Alert header-lines are 
added. Typical added header-lines look like;
X-Amavis-Alert: BAD HEADER SECTION Improper use of control character (char 0D
        hex): Content-Type: ...MAILID";\r\n
        boundary="=_X[...]

This is caused by the change of the header format from 0.3.0 to 0.3.1 which 
enables SpamAssassin to read the headers in the first place, see 
http://trac.roundcube.net/ticket/1486513
Can this annoying behaviour be fixed (since it is a step back from 0.3.0 in 
some way), by;
1) Using the patch of changeset 3291 (http://trac.roundcube.net/changeset/3291)
2) Packaging 0.4.0 release version (changeset 3291 is applied in 0.4.0 beta), 
see wishlist item #592312

Best regards,
Jort Koopmans


-- System Information:
Debian Release: 5.0.5
  APT prefers stable
  APT policy: (990, 'stable'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages roundcube depends on:
ii  roundcube-core                0.3.1-4    skinnable AJAX based webmail solut

roundcube recommends no packages.

roundcube suggests no packages.

Versions of packages roundcube-core depends on:
ii  apache2            2.2.9-10+lenny8       Apache HTTP Server metapackage
ii  apache2-mpm-prefor 2.2.9-10+lenny8       Apache HTTP Server - traditional n
ii  dbconfig-common    1.8.46                common framework for packaging dat
ii  debconf [debconf-2 1.5.24                Debian configuration management sy
ii  libjs-jquery       1.4.2-2               JavaScript library for dynamic web
ii  libmagic1          4.26-1                File type determination library us
ii  php-auth           1.6.2-1               PHP PEAR modules for creating an a
ii  php-mail-mime      1.8.0-1               PHP PEAR module for creating MIME 
ii  php-mdb2           2.5.0b2-1             PHP PEAR module to provide a commo
ii  php-net-smtp       1.3.1-1               PHP PEAR module implementing SMTP 
ii  php-net-socket     1.0.9-2               PHP PEAR Network Socket Interface 
ii  php5               5.2.6.dfsg.1-1+lenny9 server-side, HTML-embedded scripti
ii  php5-gd            5.2.6.dfsg.1-1+lenny9 GD module for php5
ii  php5-mcrypt        5.2.6.dfsg.1-1+lenny9 MCrypt module for php5
ii  php5-pspell        5.2.6.dfsg.1-1+lenny9 pspell module for php5
ii  roundcube-mysql    0.3.1-4               metapackage providing MySQL depend
ii  tinymce            3.3.8-1               platform independent web based Jav
ii  ucf                3.0016                Update Configuration File: preserv

-- debconf information:
  roundcube/upgrade-error: abort
  roundcube/pgsql/authmethod-user: password
  roundcube/purge: false
* roundcube/dbconfig-install: true
  roundcube/db/dbname: roundcube
  roundcube/language: en_US
  roundcube/remote/newhost:
  roundcube/pgsql/changeconf: false
  roundcube/upgrade-backup: true
  roundcube/install-error: abort
  roundcube/mysql/admin-user: root
  roundcube/hosts:
  roundcube/pgsql/authmethod-admin: ident
  roundcube/dbconfig-remove:
  roundcube/pgsql/admin-user: postgres
  roundcube/internal/skip-preseed: false
  roundcube/db/app-user: roundcube
  roundcube/dbconfig-reinstall: false
  roundcube/mysql/method: unix socket
  roundcube/remove-error: abort
  roundcube/restart-webserver: true
  roundcube/dbconfig-upgrade: true
  roundcube/remote/port:
  roundcube/pgsql/method: unix socket
  roundcube/pgsql/manualconf:
  roundcube/db/basepath:
  roundcube/pgsql/no-empty-passwords:
  roundcube/passwords-do-not-match:
  roundcube/internal/reconfiguring: false
  roundcube/reconfigure-webserver: apache2, lighttpd
* roundcube/database-type: mysql
  roundcube/remote/host:
  roundcube/missing-db-package-error: abort
<?php

/*
 +-----------------------------------------------------------------------+
 | program/steps/mail/sendmail.inc                                       |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Compose a new mail message with all headers and attachments         |
 |   and send it using the PEAR::Net_SMTP class or with PHP mail()       |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <[email protected]>                        |
 +-----------------------------------------------------------------------+

 $Id$

*/

// remove all scripts and act as called in frame
$OUTPUT->reset();
$OUTPUT->framed = TRUE;

$savedraft = !empty($_POST['_draft']) ? TRUE : FALSE;

/****** checks ********/

if (!isset($_SESSION['compose']['id'])) {
  raise_error(array('code' => 500, 'type' => 'smtp',
    'file' => __FILE__, 'line' => __LINE__,
    'message' => "Invalid compose ID"), true, false);

  $OUTPUT->show_message("An internal error occured. Please try again.", 'error');
  $OUTPUT->send('iframe');
}

if (!$savedraft) {
  if (empty($_POST['_to']) && empty($_POST['_cc']) && empty($_POST['_bcc'])
    && empty($_POST['_subject']) && $_POST['_message']) {
    $OUTPUT->show_message('sendingfailed', 'error');
    $OUTPUT->send('iframe');
  }

  if(!empty($CONFIG['sendmail_delay'])) {
    $wait_sec = time() - intval($CONFIG['sendmail_delay']) - intval($CONFIG['last_message_time']);
    if($wait_sec < 0) {
      $OUTPUT->show_message('senttooquickly', 'error', array('sec' => $wait_sec * -1));
      $OUTPUT->send('iframe');
    }
  }
}


/****** message sending functions ********/

// encrypt parts of the header
function rcmail_encrypt_header($what)
{
  global $CONFIG, $RCMAIL;
  if (!$CONFIG['http_received_header_encrypt'])
  {
    return $what;
  }
  return $RCMAIL->encrypt($what);
}

// get identity record
function rcmail_get_identity($id)
  {
  global $USER, $OUTPUT;
  
  if ($sql_arr = $USER->get_identity($id))
    {
    $out = $sql_arr;
    $out['mailto'] = $sql_arr['email'];
    
    // Special chars as defined by RFC 822 need to in quoted string (or escaped).
    if (preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $sql_arr['name']))
      $name = '"' . addcslashes($sql_arr['name'], '"') . '"';
    else
      $name = $sql_arr['name'];

    $out['string'] = rcube_charset_convert($name, RCMAIL_CHARSET, $OUTPUT->get_charset());
    if ($sql_arr['email'])
      $out['string'] .= ' <' . $sql_arr['email'] . '>';

    return $out;
    }

  return FALSE;  
  }

/**
 * go from this:
 * <img src=".../tiny_mce/plugins/emotions/images/smiley-cool.gif" border="0" alt="Cool" title="Cool" />
 *
 * to this:
 *
 * <IMG src="cid:smiley-cool.gif"/>
 * ...
 * ------part...
 * Content-Type: image/gif
 * Content-Transfer-Encoding: base64
 * Content-ID: <smiley-cool.gif>
 */
function rcmail_attach_emoticons(&$mime_message)
{
  global $CONFIG;

  $body = $mime_message->getHTMLBody();

  // remove any null-byte characters before parsing
  $body = preg_replace('/\x00/', '', $body);
  
  $searchstr = 'program/js/tiny_mce/plugins/emotions/img/';
  $offset = 0;

  // keep track of added images, so they're only added once
  $included_images = array();

  if (preg_match_all('# src=[\'"]([^\'"]+)#', $body, $matches, PREG_OFFSET_CAPTURE)) {
    foreach ($matches[1] as $m) {
      // find emoticon image tags
      if (preg_match('#'.$searchstr.'(.*)$#', $m[0], $imatches)) {
        $image_name = $imatches[1];

        // sanitize image name so resulting attachment doesn't leave images dir
        $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i', '', $image_name);
        $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;

        if (! in_array($image_name, $included_images)) {
          // add the image to the MIME message
          if (! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name))
            $OUTPUT->show_message("emoticonerror", 'error');
          array_push($included_images, $image_name);
        }

        $body = substr_replace($body, $img_file, $m[1] + $offset, strlen($m[0]));
        $offset += strlen($img_file) - strlen($m[0]);
      }
    }
  }

  $mime_message->setHTMLBody($body);

  return $body;
}

// parse email address input
function rcmail_email_input_format($mailto)
{
  global $EMAIL_FORMAT_ERROR;

  $regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m', '/;/', '/(\S{1})(<\...@\s+>)/U');
  $replace = array(', ', ', ', '', ',', '\\1 \\2');

  // replace new lines and strip ending ', ', make address input more valid
  $mailto = trim(preg_replace($regexp, $replace, $mailto));

  $result = array();
  $items = rcube_explode_quoted_string(',', $mailto);

  foreach($items as $item) {
    $item = trim($item);
    // address in brackets without name (do nothing)
    if (preg_match('/^<\...@\s+>$/', $item)) {
      $result[] = $item;
    // address without brackets and without name (add brackets)
    } else if (preg_match('/^...@\s+$/', $item)) {
      $result[] = '<'.$item.'>';
    // address with name (handle name)
    } else if (preg_match('/\...@\s+>*$/', $item, $matches)) {
      $address = $matches[0];
      $name = str_replace($address, '', $item);
      $name = trim($name);
      if ($name && ($name[0] != '"' || $name[strlen($name)-1] != '"')
          && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $name)) {
	  $name = '"'.addcslashes($name, '"').'"';
      }
      if (!preg_match('/^<\...@\s+>$/', $address))
        $address = '<'.$address.'>';

      $result[] = $name.' '.$address;
      $item = $address;
    } else if (trim($item)) {
      continue;
    }

    // check address format
    $item = trim($item, '<>');
    if ($item && !check_email($item)) {
      $EMAIL_FORMAT_ERROR = $item;
      return;
    }
  }

  return implode(', ', $result);
}

/****** compose message ********/

if (strlen($_POST['_draft_saveid']) > 3)
  $olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST);

$message_id = sprintf('<%...@%s>', md5(uniqid('rcmail'.mt_rand(),true)), $RCMAIL->config->mail_domain($_SESSION['imap_host']));

// set default charset
$input_charset = $OUTPUT->get_charset();
$message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset;

$EMAIL_FORMAT_ERROR = NULL;

$mailto = rcmail_email_input_format(get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset));
$mailcc = rcmail_email_input_format(get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset));
$mailbcc = rcmail_email_input_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset));

if ($EMAIL_FORMAT_ERROR) {
  $OUTPUT->show_message('emailformaterror', 'error', array('email' => $EMAIL_FORMAT_ERROR)); 
  $OUTPUT->send('iframe');
}

if (empty($mailto) && !empty($mailcc)) {
  $mailto = $mailcc;
  $mailcc = null;
}
else if (empty($mailto))
  $mailto = 'undisclosed-recipients:;';

// get sender name and address
$from = get_input_value('_from', RCUBE_INPUT_POST, true, $message_charset);
$identity_arr = rcmail_get_identity($from);

if (!$identity_arr && ($from = rcmail_email_input_format($from))) {
  if (preg_match('/(\...@\s+)/', $from, $m))
    $identity_arr['mailto'] = $m[1];
} else
  $from = $identity_arr['mailto'];

if (empty($identity_arr['string']))
  $identity_arr['string'] = $from;

// compose headers array
$headers = array();

// if configured, the Received headers goes to top, for good measure
if ($CONFIG['http_received_header'])
{
  $nldlm = $RCMAIL->config->header_delimiter() . "\t";
  // FROM/VIA
  $http_header = 'from ';
  if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $host = $_SERVER['HTTP_X_FORWARDED_FOR'];
    $hostname = gethostbyaddr($host);
    if ($CONFIG['http_received_header_encrypt']) {
      $http_header .= rcmail_encrypt_header($hostname);
      if ($host != $hostname)
        $http_header .= ' ('. rcmail_encrypt_header($host) . ')';
    } else {
      $http_header .= (($host != $hostname) ? $hostname : '[' . $host . ']');
      if ($host != $hostname)
        $http_header .= ' (['. $host .'])';
    }
    $http_header .= $nldlm . ' via ';
  }
  $host = $_SERVER['REMOTE_ADDR'];
  $hostname = gethostbyaddr($host);
  if ($CONFIG['http_received_header_encrypt']) {
    $http_header .= rcmail_encrypt_header($hostname);
    if ($host != $hostname)
      $http_header .= ' ('. rcmail_encrypt_header($host) . ')';
  } else {
    $http_header .= (($host != $hostname) ? $hostname : '[' . $host . ']');
    if ($host != $hostname)
      $http_header .= ' (['. $host .'])';
  }
  // BY
  $http_header .= $nldlm . 'by ' . $_SERVER['HTTP_HOST'];
  // WITH
  $http_header .= $nldlm . 'with HTTP (' . $_SERVER['SERVER_PROTOCOL'] .
      ' '.$_SERVER['REQUEST_METHOD'] . '); ' . date('r');
  $http_header = wordwrap($http_header, 69, $nldlm);

  $headers['Received'] = $http_header;
}

$headers['Date'] = date('r');
$headers['From'] = rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset);
$headers['To'] = $mailto;

// additional recipients
if (!empty($mailcc))
  $headers['Cc'] = $mailcc;

if (!empty($mailbcc))
  $headers['Bcc'] = $mailbcc;
  
if (!empty($identity_arr['bcc']))
  $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];

// add subject
$headers['Subject'] = trim(get_input_value('_subject', RCUBE_INPUT_POST, TRUE, $message_charset));

if (!empty($identity_arr['organization']))
  $headers['Organization'] = $identity_arr['organization'];

if (!empty($_POST['_replyto']))
  $headers['Reply-To'] = rcmail_email_input_format(get_input_value('_replyto', RCUBE_INPUT_POST, TRUE, $message_charset));
else if (!empty($identity_arr['reply-to']))
  $headers['Reply-To'] = $identity_arr['reply-to'];

if (!empty($_SESSION['compose']['reply_msgid']))
  $headers['In-Reply-To'] = $_SESSION['compose']['reply_msgid'];

if (!empty($_SESSION['compose']['references']))
  $headers['References'] = $_SESSION['compose']['references'];

if (!empty($_POST['_priority']))
  {
  $priority = intval($_POST['_priority']);
  $a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest');
  if ($str_priority = $a_priorities[$priority])
    $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority));
  }

if (!empty($_POST['_receipt']))
  {
  $headers['Return-Receipt-To'] = $identity_arr['string'];
  $headers['Disposition-Notification-To'] = $identity_arr['string'];
  }

// additional headers
$headers['Message-ID'] = $message_id;
$headers['X-Sender'] = $from;

if (!empty($CONFIG['useragent']))
  $headers['User-Agent'] = $CONFIG['useragent'];

$isHtmlVal = strtolower(get_input_value('_is_html', RCUBE_INPUT_POST));
$isHtml = ($isHtmlVal == "1");

// fetch message body
$message_body = get_input_value('_message', RCUBE_INPUT_POST, TRUE, $message_charset);

if (!$savedraft) {
  // remove signature's div ID
  if ($isHtml)
    $message_body = preg_replace('/\s*id="_rc_sig"/', '', $message_body);

  // generic footer for all messages
  if (!empty($CONFIG['generic_message_footer'])) {
    $footer = file_get_contents(realpath($CONFIG['generic_message_footer']));
    $footer = rcube_charset_convert($footer, RCMAIL_CHARSET, $message_charset);
  }
}

// set line length for body wrapping
$LINE_LENGTH = $RCMAIL->config->get('line_length', 75);

// Since we can handle big messages with disk usage, we need more time to work
@set_time_limit(0);

// create PEAR::Mail_mime instance
$MAIL_MIME = new Mail_mime($RCMAIL->config->header_delimiter());

// Check if we have enough memory to handle the message in it
// It's faster than using files, so we'll do this if we only can
if (is_array($_SESSION['compose']['attachments']) && $CONFIG['smtp_server']
  && ($mem_limit = parse_bytes(ini_get('memory_limit'))))
{
  $memory = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB

  foreach ($_SESSION['compose']['attachments'] as $id => $attachment)
    $memory += $attachment['size'];

  // Yeah, Net_SMTP needs up to 12x more memory, 1.33 is for base64
  if ($memory * 1.33 * 12 > $mem_limit)
    $MAIL_MIME->setParam('delay_file_io', true);
}

// For HTML-formatted messages, construct the MIME message with both
// the HTML part and the plain-text part

if ($isHtml) {
  $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $message_body, 'type' => 'html', 'message' => $MAIL_MIME));
  $MAIL_MIME->setHTMLBody($plugin['body'] . ($footer ? "\r\n<pre>".$footer.'</pre>' : ''));

  // add a plain text version of the e-mail as an alternative part.
  $h2t = new html2text($plugin['body'], false, true, 0);
  $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n") . ($footer ? "\r\n".$footer : '');
  $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true);
  if (!strlen($plainTextPart)) {
    // empty message body breaks attachment handling in drafts 
    $plainTextPart = "\r\n"; 
  }
  $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $plainTextPart, 'type' => 'alternative', 'message' => $MAIL_MIME));
  $MAIL_MIME->setTXTBody($plugin['body']);

  // look for "emoticon" images from TinyMCE and copy into message as attachments
  $message_body = rcmail_attach_emoticons($MAIL_MIME);
}
else
  {
  $message_body = rc_wordwrap($message_body, $LINE_LENGTH, "\r\n");
  if ($footer)
    $message_body .= "\r\n" . $footer;
  $message_body = wordwrap($message_body, 998, "\r\n", true);
  if (!strlen($message_body)) { 
    // empty message body breaks attachment handling in drafts 
    $message_body = "\r\n"; 
  }
  $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $message_body, 'type' => 'plain', 'message' => $MAIL_MIME));
  $MAIL_MIME->setTXTBody($plugin['body'], false, true);
}

// chose transfer encoding
$charset_7bit = array('ASCII', 'ISO-2022-JP', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-15');
$transfer_encoding = in_array(strtoupper($message_charset), $charset_7bit) ? '7bit' : '8bit';

// add stored attachments, if any
if (is_array($_SESSION['compose']['attachments']))
{
  foreach ($_SESSION['compose']['attachments'] as $id => $attachment) {
    // This hook retrieves the attachment contents from the file storage backend
    $attachment = $RCMAIL->plugins->exec_hook('get_attachment', $attachment);

    $dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\s\'"]\s*/';
    $message_body = $MAIL_MIME->getHTMLBody();
    if ($isHtml && (preg_match($dispurl, $message_body) > 0)) {
      $message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'" ', $message_body);
      $MAIL_MIME->setHTMLBody($message_body);
      
      if ($attachment['data'])
        $MAIL_MIME->addHTMLImage($attachment['data'], $attachment['mimetype'], $attachment['name'], false);
      else
        $MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name'], true);
    }
    else {
      $ctype = str_replace('image/pjpeg', 'image/jpeg', $attachment['mimetype']); // #1484914
      $file = $attachment['data'] ? $attachment['data'] : $attachment['path'];

      // .eml attachments send inline
      $MAIL_MIME->addAttachment($file,
        $ctype, 
        $attachment['name'],
        ($attachment['data'] ? false : true),
        ($ctype == 'message/rfc822' ? $transfer_encoding : 'base64'),
        ($ctype == 'message/rfc822' ? 'inline' : 'attachment'),
        $message_charset, '', '', 
        $CONFIG['mime_param_folding'] ? 'quoted-printable' : NULL,
        $CONFIG['mime_param_folding'] == 2 ? 'quoted-printable' : NULL
      );
    }
  }
}

// encoding settings for mail composing
$MAIL_MIME->setParam('text_encoding', $transfer_encoding);
$MAIL_MIME->setParam('html_encoding', 'quoted-printable');
$MAIL_MIME->setParam('head_encoding', 'quoted-printable');
$MAIL_MIME->setParam('head_charset', $message_charset);
$MAIL_MIME->setParam('html_charset', $message_charset);
$MAIL_MIME->setParam('text_charset', $message_charset);

$data = $RCMAIL->plugins->exec_hook('outgoing_message_headers', array('headers' => $headers));
$headers = $data['headers'];

// encoding subject header with mb_encode provides better results with asian characters
if (function_exists('mb_encode_mimeheader'))
{
  mb_internal_encoding($message_charset);
  $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
    $message_charset, 'Q', $RCMAIL->config->header_delimiter(), 8);
  mb_internal_encoding(RCMAIL_CHARSET);
}

// pass headers to message object
$MAIL_MIME->headers($headers);

// Begin SMTP Delivery Block 
if (!$savedraft)
{
  // check for 'From' address (identity may be incomplete)
  if ($identity_arr && !$identity_arr['mailto']) {
    $OUTPUT->show_message('nofromaddress', 'error');
    $OUTPUT->send('iframe'); 
  }

  $sent = rcmail_deliver_message($MAIL_MIME, $from, $mailto, $smtp_error, $mailbody_file);

  // return to compose page if sending failed
  if (!$sent)
    {
    // remove temp file
    if ($mailbody_file) {
      unlink($mailbody_file);
      }

    if ($smtp_error)
      $OUTPUT->show_message($smtp_error['label'], 'error', $smtp_error['vars']); 
    else
      $OUTPUT->show_message('sendingfailed', 'error'); 
    $OUTPUT->send('iframe');
    }

  // save message sent time
  if (!empty($CONFIG['sendmail_delay']))
    $RCMAIL->user->save_prefs(array('last_message_time' => time()));
  
  // set replied/forwarded flag
  if ($_SESSION['compose']['reply_uid'])
    $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED', $_SESSION['compose']['mailbox']);
  else if ($_SESSION['compose']['forward_uid'])
    $IMAP->set_flag($_SESSION['compose']['forward_uid'], 'FORWARDED', $_SESSION['compose']['mailbox']);

} // End of SMTP Delivery Block


// Determine which folder to save message
if ($savedraft)
  $store_target = $CONFIG['drafts_mbox'];
else	
  $store_target = isset($_POST['_store_target']) ? get_input_value('_store_target', RCUBE_INPUT_POST) : $CONFIG['sent_mbox'];

if ($store_target)
  {
  // check if mailbox exists
  if (!in_array($store_target, $IMAP->list_mailboxes()))
    {
      // folder may be existing but not subscribed (#1485241)
      if (!in_array($store_target, $IMAP->list_unsubscribed()))
        $store_folder = $IMAP->create_mailbox($store_target, TRUE);
      else if ($IMAP->subscribe($store_target))
        $store_folder = TRUE;
    }
  else
    $store_folder = TRUE;

  // append message to sent box
  if ($store_folder) {

    // message body in file
    if ($mailbody_file || $MAIL_MIME->getParam('delay_file_io')) {
      $headers = $MAIL_MIME->txtHeaders();
      
      // file already created
      if ($mailbody_file)
        $msg = $mailbody_file;
      else {
        $temp_dir = $RCMAIL->config->get('temp_dir');
        $mailbody_file = tempnam($temp_dir, 'rcmMsg');
        if (!PEAR::isError($msg = $MAIL_MIME->saveMessageBody($mailbody_file)))
          $msg = $mailbody_file;
        }
      }
    else {
      $msg = $MAIL_MIME->getMessage();
      $headers = '';
      }

    if (PEAR::isError($msg))
      raise_error(array('code' => 600, 'type' => 'php',
	    'file' => __FILE__, 'line' => __LINE__,
            'message' => "Could not create message: ".$msg->getMessage()),
            TRUE, FALSE);
    else {
      $saved = $IMAP->save_message($store_target, $msg, $headers, $mailbody_file ? true : false);
      }

    if ($mailbody_file) {
      unlink($mailbody_file);
      $mailbody_file = null;
      }

    // raise error if saving failed
    if (!$saved) {
      raise_error(array('code' => 800, 'type' => 'imap',
	    'file' => __FILE__, 'line' => __LINE__,
            'message' => "Could not save message in $store_target"), TRUE, FALSE);
    
      if ($savedraft) {
        $OUTPUT->show_message('errorsaving', 'error');
        $OUTPUT->send('iframe');
        }
      }
    }

  if ($olddraftmessageid)
    {
    // delete previous saved draft
    $a_deleteid = $IMAP->search($CONFIG['drafts_mbox'], 'HEADER Message-ID '.$olddraftmessageid);

    $deleted = $IMAP->delete_message($IMAP->get_uid($a_deleteid[0], $CONFIG['drafts_mbox']), $CONFIG['drafts_mbox']);

    // raise error if deletion of old draft failed
    if (!$deleted)
      raise_error(array('code' => 800, 'type' => 'imap',
    		'file' => __FILE__, 'line' => __LINE__,
                'message' => "Could not delete message from ".$CONFIG['drafts_mbox']), TRUE, FALSE);
    }
  }
// remove temp file
else if ($mailbody_file) {
  unlink($mailbody_file);
  }


if ($savedraft)
  {
  $msgid = strtr($message_id, array('>' => '', '<' => ''));
  
  // remember new draft-uid
  $draftids = $IMAP->search($CONFIG['drafts_mbox'], 'HEADER Message-ID '.$msgid);
  $_SESSION['compose']['param']['_draft_uid'] = $IMAP->get_uid($draftids[0], $CONFIG['drafts_mbox']);

  // display success
  $OUTPUT->show_message('messagesaved', 'confirmation');

  // update "_draft_saveid" and the "cmp_hash" to prevent "Unsaved changes" warning
  $OUTPUT->command('set_draft_id', $msgid);
  $OUTPUT->command('compose_field_hash', true);

  // start the auto-save timer again
  $OUTPUT->command('auto_save_start');

  $OUTPUT->send('iframe');
  }
else
  {
  rcmail_compose_cleanup();

  if ($store_folder && !$saved)
    $OUTPUT->command('sent_successfully', 'error', rcube_label('errorsavingsent'));
  else
    $OUTPUT->command('sent_successfully', 'confirmation', rcube_label('messagesent'));
  $OUTPUT->send('iframe');
  }

?>

--- End Message ---
--- Begin Message ---
Source: roundcube
Source-Version: 0.3.1-5

We believe that the bug you reported is fixed in the latest version of
roundcube, which is due to be installed in the Debian FTP archive:

roundcube-core_0.3.1-5_all.deb
  to main/r/roundcube/roundcube-core_0.3.1-5_all.deb
roundcube-mysql_0.3.1-5_all.deb
  to main/r/roundcube/roundcube-mysql_0.3.1-5_all.deb
roundcube-pgsql_0.3.1-5_all.deb
  to main/r/roundcube/roundcube-pgsql_0.3.1-5_all.deb
roundcube-sqlite_0.3.1-5_all.deb
  to main/r/roundcube/roundcube-sqlite_0.3.1-5_all.deb
roundcube_0.3.1-5.debian.tar.gz
  to main/r/roundcube/roundcube_0.3.1-5.debian.tar.gz
roundcube_0.3.1-5.dsc
  to main/r/roundcube/roundcube_0.3.1-5.dsc
roundcube_0.3.1-5_all.deb
  to main/r/roundcube/roundcube_0.3.1-5_all.deb



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Vincent Bernat <[email protected]> (supplier of updated roundcube package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Thu, 02 Sep 2010 07:54:58 +0200
Source: roundcube
Binary: roundcube-core roundcube roundcube-mysql roundcube-pgsql 
roundcube-sqlite
Architecture: source all
Version: 0.3.1-5
Distribution: unstable
Urgency: low
Maintainer: Debian Roundcube Maintainers 
<[email protected]>
Changed-By: Vincent Bernat <[email protected]>
Description: 
 roundcube  - skinnable AJAX based webmail solution for IMAP servers - metapack
 roundcube-core - skinnable AJAX based webmail solution for IMAP servers
 roundcube-mysql - metapackage providing MySQL dependencies for RoundCube
 roundcube-pgsql - metapackage providing PostgreSQL dependencies for RoundCube
 roundcube-sqlite - metapackage providing sqlite dependencies for RoundCube
Closes: 588295 593271 595204
Changes: 
 roundcube (0.3.1-5) unstable; urgency=low
 .
   * Depends on php-mail-mime 1.7.0 or more recent to handle correctly
     'mime_param_folding' directive. Closes: #588295.
   * Add Danish debconf translation, thanks to Joe Dalton.
     Closes: #593271.
   * Add a patch to fix Received header to behave better with Spam
     Assassin. Closes: #595204.
Checksums-Sha1: 
 7a3dbcf93f74ce3d4739782c78ca1807565254d2 1371 roundcube_0.3.1-5.dsc
 c5647536e81cc2e1615d73e1bdcb69b775b62232 38052 roundcube_0.3.1-5.debian.tar.gz
 0f61a025ebc397ffe5b20c6cff49c4a38ba119f6 720310 roundcube-core_0.3.1-5_all.deb
 aad7bddb41dd6a6c0065a933340b3f34650bfcec 12738 roundcube_0.3.1-5_all.deb
 cc1a7b6c08601d0e9adac6929b1f19e9c0940675 12088 roundcube-mysql_0.3.1-5_all.deb
 5d178e815a3f5c23b8a364796b37694dfeb9ec2b 12086 roundcube-pgsql_0.3.1-5_all.deb
 8b10471fbf11b2560e476fee490cd943462a12f7 12046 roundcube-sqlite_0.3.1-5_all.deb
Checksums-Sha256: 
 fc77ea62d8aead9083fd0239fb67dfb6caae3d1b5f79093a5bb5ecc89c9abb5e 1371 
roundcube_0.3.1-5.dsc
 98622dc530ff228c82b80a1a309e08df7772e7c428a2d6390dc06166739209a1 38052 
roundcube_0.3.1-5.debian.tar.gz
 0a883fc464b7fa07951efb570c780a935d2bf9e9a323583cb6a01bc39a7c3f5f 720310 
roundcube-core_0.3.1-5_all.deb
 fa0358fa98e578dcb66ac6b6fcd42c912ec1465a04935f1caa9ca08f171fb821 12738 
roundcube_0.3.1-5_all.deb
 3c32595f9d5656e46cc7fa953fcfd7c8f6548f3d67ac8e9ad8fd7bf55c8d81de 12088 
roundcube-mysql_0.3.1-5_all.deb
 ef42cfd60f0b77ffa46c49ce348900771fc9ad6fda5b384aaf1aef6ebe9ffc35 12086 
roundcube-pgsql_0.3.1-5_all.deb
 cb313dd2a75a8a1e2f18f0dad6a655f8617e1c7b70fb2cbea61d08ddd1f5cd8e 12046 
roundcube-sqlite_0.3.1-5_all.deb
Files: 
 74578a5050428c9a3e9151bec5d1f0cd 1371 web extra roundcube_0.3.1-5.dsc
 05e9a9a17bd1ffde65d43e4512c2625b 38052 web extra 
roundcube_0.3.1-5.debian.tar.gz
 67300e1400d44d176a443174219519b0 720310 web extra 
roundcube-core_0.3.1-5_all.deb
 f8eca93057e53aebb036db5dba7248c6 12738 web extra roundcube_0.3.1-5_all.deb
 04fedf74cd1c427bec87ba2636dd8e04 12088 web extra 
roundcube-mysql_0.3.1-5_all.deb
 ed59c0a2dc189cb821eb10f2c411eba2 12086 web extra 
roundcube-pgsql_0.3.1-5_all.deb
 19631c2bacdb9853f6b682a3f118fcbc 12046 web extra 
roundcube-sqlite_0.3.1-5_all.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkyDVy8ACgkQKFvXofIqeU7U5ACePOW0BRv7BX8khd9NN+zcijj0
8LoAoIQv4GM6Zg2alD9AxlCr6fwX23Ov
=pG5q
-----END PGP SIGNATURE-----



--- End Message ---

Reply via email to