mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
38 lines
842 B
Go
38 lines
842 B
Go
package smtpd
|
|
|
|
import (
|
|
"github.com/jhillyerd/inbucket/log"
|
|
"time"
|
|
)
|
|
|
|
// retentionScan does a single pass of all mailboxes looking for messages that can be purged
|
|
func retentionScan(ds DataStore, maxAge time.Duration, sleep time.Duration) error {
|
|
log.Trace("Starting retention scan")
|
|
cutoff := time.Now().Add(-1 * maxAge)
|
|
mboxes, err := ds.AllMailboxes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, mb := range mboxes {
|
|
messages, err := mb.GetMessages()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, msg := range messages {
|
|
if msg.Date().Before(cutoff) {
|
|
log.Trace("Purging expired message %v", msg.Id())
|
|
err = msg.Delete()
|
|
if err != nil {
|
|
// Log but don't abort
|
|
log.Error("Failed to purge message %v: %v", msg.Id(), err)
|
|
}
|
|
}
|
|
}
|
|
// Sleep after completing a mailbox
|
|
time.Sleep(sleep)
|
|
}
|
|
|
|
return nil
|
|
}
|