Clean up destination queues when moving messages from Outbox

This commit is contained in:
Neil Alexander
2025-12-02 22:34:08 +00:00
parent 8385ac78da
commit 6e29644f82
2 changed files with 10 additions and 3 deletions

View File

@@ -326,6 +326,9 @@ func (mbox *Mailbox) MoveMessages(uid bool, seqset *imap.SeqSet, dest string) er
if err := mbox.backend.Storage.MailMove(mbox.name, int(id), dest); err != nil { if err := mbox.backend.Storage.MailMove(mbox.name, int(id), dest); err != nil {
return err return err
} }
if mbox.name == "Outbox" {
mbox.backend.Storage.QueueDeleteDestinationForID("Outbox", int(id))
}
} }
return nil return nil
} }

View File

@@ -9,7 +9,9 @@
package smtpsender package smtpsender
import ( import (
"database/sql"
"encoding/hex" "encoding/hex"
"errors"
"fmt" "fmt"
"log" "log"
"net/mail" "net/mail"
@@ -112,14 +114,16 @@ func (q *Queue) run() {
if err != nil { if err != nil {
q.queues.Log.Println("Error with queue:", err) q.queues.Log.Println("Error with queue:", err)
} }
q.queues.Log.Println("There are", len(refs), "mail(s) queued for", q.destination)
defer q.queues.Storage.MailExpunge("Outbox") // nolint:errcheck defer q.queues.Storage.MailExpunge("Outbox") // nolint:errcheck
for _, ref := range refs { for _, ref := range refs {
_, mail, err := q.queues.Storage.MailSelect("Outbox", ref.ID) _, mail, err := q.queues.Storage.MailSelect("Outbox", ref.ID)
if err != nil { if err != nil {
if errors.Is(err, sql.ErrNoRows) {
q.queues.Storage.QueueDeleteDestinationForID("Outbox", ref.ID)
} else {
q.queues.Log.Println("Failed to get mail", ref.ID, "due to error:", err) q.queues.Log.Println("Failed to get mail", ref.ID, "due to error:", err)
}
continue continue
} }