[#3716] Can't delete emails (to trash) when quota is full
Summary Can't delete emails (to trash) when quota is full
Queue IMP
Queue Version 4.1
Type Bug
State Resolved
Priority 1. Low
Owners
Requester tuomas.silen@nodeta.fi
Created 2006-03-30 (4895 days ago)
Due
Updated 2006-03-30 (4895 days ago)
Assigned
Resolved 2006-03-30 (4895 days ago)
Milestone
Patch No

Comments
tuomas.silen@nodeta.fi 2006-03-30 12:01:17
There seems to be some bugs in delete() function in lib/Message.php that

prevent emails from being deleted (or actually being moved to trash) when

quota is full.



First, on line 205 there is line

     if (stristr('over quota', $error_msg) !== false) {

The definition of this function is stristr ( string haystack, string needle )

So the parameters are mixed up and it probably never matches with anything.



Also at least with Courier IMAP, you get an error "You exceeded your 
mail quota" so it certainly won't match.



Changing the line to

    if ((stristr($error_msg, 'over quota') !== false) || 
(stristr($error_msg, 'exceeded your mail quota') !== false)) {

works for me.



Now the file gets deleted, but not moved to the trash and you still 
get the quota exeeced error. This is because of an other bug on line 
218:

    if (!@imap_append($imp['stream'], $trash, $val)) {

This actually returns an error that INBOX.Trash does not exist, but $error_msg

is not updated.



Apparently $trash should be IMP::serverString($trash).



Attached patch seems to fix these problems.



Michael Slusarz <slusarz@horde.org> 2006-03-30 15:30:32
> Now the file gets deleted, but not moved to the trash and you still

> get the quota exeeced error. This is because of an other bug on line

> 218:

>    if (!@imap_append($imp['stream'], $trash, $val)) {

> This actually returns an error that INBOX.Trash does not exist, but

> $error_msg

> is not updated.

>

> Apparently $trash should be IMP::serverString($trash).



Duplicate of Bug 3687.



Michael Slusarz <slusarz@horde.org> 2006-03-30 15:35:31
> First, on line 205 there is line

>     if (stristr('over quota', $error_msg) !== false) {

> The definition of this function is stristr ( string haystack, string needle )

> So the parameters are mixed up and it probably never matches with anything.

>

> Also at least with Courier IMAP, you get an error "You exceeded your

> mail quota" so it certainly won't match.

>

> Changing the line to

>    if ((stristr($error_msg, 'over quota') !== false) ||

> (stristr($error_msg, 'exceeded your mail quota') !== false)) {

> works for me.



Fixed in HEAD and 4.1.1.

Chuck Hagenbuch <chuck@horde.org> 2006-03-30 17:57:00
Michael, should this be marked as resolved or duplicate now?