summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/main.inc.php.dist12
-rw-r--r--program/include/main.inc6
-rw-r--r--program/lib/imap.inc29
3 files changed, 35 insertions, 12 deletions
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index e8fbd2ff0..8cb21129c 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -328,5 +328,17 @@ $rcmail_config['logout_purge'] = FALSE;
// Compact INBOX on logout
$rcmail_config['logout_expunge'] = FALSE;
+/**
+ * 'Delete always'
+ * This setting reflects if mail should be always marked as deleted,
+ * even if moving to "Trash" fails. This is necessary in some setups
+ * because a) people may not have a Trash folder or b) they are over
+ * quota (and Trash is included in the quota).
+ *
+ * This is a failover setting for iil_C_Move when a message is moved
+ * to the Trash, and not the same as "delete_right_away".
+ */
+$rcmail_config['delete_always'] = true;
+
// end of config file
?>
diff --git a/program/include/main.inc b/program/include/main.inc
index 596079124..a9c8ccbfb 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -279,7 +279,11 @@ function rcube_charset_convert($str, $from, $to=NULL)
if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
{
$aliases['GB2312'] = 'GB18030';
- return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+ $_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+ if ($_iconv !== false)
+ {
+ return $_iconv;
+ }
}
// settings for mbstring module (by Tadashi Jokagi)
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index e97f81844..8ea4fbd12 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -1907,7 +1907,9 @@ function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) {
if (iil_C_Select($conn, $mailbox)) {
$c = 0;
- fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n");
+ $_line = "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n";
+ trigger_error($_line, E_USER_WARNING);
+ fputs($fp, $_line);
do {
$line=chop(iil_ReadLine($fp, 100));
if ($line[0] == '*') {
@@ -2046,16 +2048,21 @@ function iil_C_Search(&$conn, $folder, $criteria) {
}
function iil_C_Move(&$conn, $messages, $from, $to) {
- $fp = $conn->fp;
-
- if (!$from || !$to) {
- return -1;
- }
-
- $r = iil_C_Copy($conn, $messages, $from,$to);
- if ($r==0) {
- return iil_C_Delete($conn, $from, $messages);
- }
+ global $CONFIG;
+
+ $fp = $conn->fp;
+
+ if (!$from || !$to) {
+ return -1;
+ }
+ $r = iil_C_Copy($conn, $messages, $from,$to);
+ if ($r==0) {
+ return iil_C_Delete($conn, $from, $messages);
+ }
+ // Copy failed
+ if (isset($CONFIG['delete_always']) && $CONFIG['delete_always'] === true) {
+ return iil_C_Delete($conn, $from, $messages);
+ }
return $r;
}