<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Bron,<br>
<br>
Yes, it sounds like that's what I'm looking for: running expunge
periodically.<br>
<br>
Now there's one slight problem here: I can't just run expunge as it is.
I have users who periodically need to undelete messages. I'd like
expunge to only act on messages older than X days, giving people the
chance to undelete messages within that time period.<br>
<br>
I'll check out some IMAP libraries. Perhaps one offers to obtain a list
of all messages with the \Deleted flag, then check its received time
stamp and do the math on that. If older than X, delete/expunge/whatever
it, else skip it.<br>
<br>
<br>
<pre class="moz-signature" cols="72">Gerard Beekmans
IT Manager
Achilles Media
Tel: 403-678-1216 ext. 102
Email: <a class="moz-txt-link-abbreviated" href="mailto:gbeekmans@achillesmedia.com">gbeekmans@achillesmedia.com</a>

</pre>
<br>
<br>
Bron Gondwana wrote:
<blockquote cite="mid:20080819000531.GA28964@brong.net" type="cite">
  <pre wrap="">On Mon, Aug 18, 2008 at 05:09:53PM -0500, Kenneth Marshall wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">In the manual page, the definition of the '-X' option seems to
do what you want:

      -X expunge-days
              Expunge  previously deleted messages older than expunge-days
              (when using the "delayed" expunge mode).  The default is
              0 (zero) days, which will expunge all previously deleted messages.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Messages go through the following life cycle in "traditional IMAP",
example:

Created (\Recent)        - LMTP DELIVER (UID = 9)
No flags ()              - A001 SELECT INBOX (clears the \Recent)
Viewed (\Seen)           - A002 UID FETCH 9 RFC822
Deleted (\Deleted \Seen) - A003 UID STORE 9 +FLAGS (\Deleted)
Purged  (no message)     - A004 EXPUNGE

Now, what the -X option actually does is turns this into:

Created (\Recent)        - LMTP DELIVER (UID = 9)
No flags ()              - A001 SELECT INBOX (clears the \Recent)
Viewed (\Seen)           - A002 UID FETCH 9 RFC822
Deleted (\Deleted \Seen) - A003 UID STORE 9 +FLAGS (\Deleted)
Purged  (no index record)- A004 EXPUNGE

but the file is still on disk, just the index record has been moved
from the file cyrus.index to a new file cyrus.expunge.  A week later:

Cleaned up (no file)     - cyr_expire -X 7

The cyrus.expunge record and the actual spool file itself get deleted at
this point.  Until then you can un-delete the record using the
"unexpunge" command in cyrus 2.3.X.

---

I think what the original requestor was actually looking for is a tool
that can run the "EXPUNGE" phase on a regular basis.  As far as I'm
aware there's nothing that ships with Cyrus that can do it.  If I was
writing something for the job I would make an admin IMAP connection to
Cyrus and just cycle through the folders calling 'EXPUNGE' on them.
Cheap and nasty, but it would do the trick.  You can do this in any
language with a TCP library, though something with an IMAP interface
library would be nicer.  I'd use Perl and Mail::IMAPTalk, but that's
just because that's what I already use!

Bron.
  </pre>
</blockquote>
</body>
</html>