php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #10536 imap_expunge() can't really expunge mail
Submitted: 2001-04-28 10:25 UTC Modified: 2001-04-28 13:40 UTC
From: cwyeh at ccca dot nctu dot edu dot tw Assigned:
Status: Not a bug Package: IMAP related
PHP Version: 4.0.4pl1 OS: FreeBSD 4.3
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: cwyeh at ccca dot nctu dot edu dot tw
New email:
PHP Version: OS:

 

 [2001-04-28 10:25 UTC] cwyeh at ccca dot nctu dot edu dot tw
As I wrote the following code I found the strong situation in imap_expunge(). It will expunge mails with odd number only but not every mail as I expected.

$mbox =  imap_open("{localhost/pop3:110INBOX", "test", "test");

$num_msg = imap_num_msg($mbox);
echo "start at $num_msg...<br>";
for ( $i=1; $i<=$num_msg; $i++ ) {

   imap_delete($mbox, $i);
   imap_expunge($mbox);
   echo "doing $i....<br>";
}
imap_expunge($mbox);
$num_msg = imap_num_msg($mbox);
echo "now is $num_msg<br>";
imap_close($mbox);

I have the following output:

start at 10...
doing 1....
doing 2....
doing 3....
doing 4....
doing 5....
doing 6....
doing 7....
doing 8....
doing 9....
doing 10....
now is 5

If I modify the code as following the problem solved:

for ( $i=1; $i<=$num_msg; $i++ ) {
   imap_delete($mbox, $i);
   echo "doing $i....<br>";
}
imap_expunge($mbox);

The result is coreect and all mail has been deleted.
This bug occurs if a web mail system with a pop server try to delete lots of spam at a time.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-04-28 13:40 UTC] chagenbu@php.net
Your second example is correct, and is also a heck of a lot more efficient.

The first example doesn't work because every time you call imap_expunge(), the pop3 server actually deletes the messages, and the message numbers change. So if you have messages 1, 2, 3, 4, you delete 1, and you call imap_expunge, you don't have 2, 3, 4, you have 1, 2, 3. Your code then tries to delete number 2, leaving you with 1, 2 ... you see where this is going.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Oct 06 10:01:27 2024 UTC