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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
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 27 16:01:27 2024 UTC