diff --git a/internal/imapserver/mailbox.go b/internal/imapserver/mailbox.go index ada5540..c7265cc 100644 --- a/internal/imapserver/mailbox.go +++ b/internal/imapserver/mailbox.go @@ -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 { return err } + if mbox.name == "Outbox" { + mbox.backend.Storage.QueueDeleteDestinationForID("Outbox", int(id)) + } } return nil } diff --git a/internal/smtpsender/sender.go b/internal/smtpsender/sender.go index d025562..34b6cb7 100644 --- a/internal/smtpsender/sender.go +++ b/internal/smtpsender/sender.go @@ -9,7 +9,9 @@ package smtpsender import ( + "database/sql" "encoding/hex" + "errors" "fmt" "log" "net/mail" @@ -112,14 +114,16 @@ func (q *Queue) run() { if err != nil { 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 for _, ref := range refs { _, mail, err := q.queues.Storage.MailSelect("Outbox", ref.ID) if err != nil { - q.queues.Log.Println("Failed to get mail", ref.ID, "due to error:", err) + 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) + } continue }