From 814d9bc073ad7890bac3ad127cc26be02047a0cb Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 8 Jul 2021 22:58:36 +0100 Subject: [PATCH] Please Thunderbird somewhat --- cmd/yggmail/main.go | 1 + internal/imapserver/mailbox.go | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cmd/yggmail/main.go b/cmd/yggmail/main.go index 16b74a6..a2a914c 100644 --- a/cmd/yggmail/main.go +++ b/cmd/yggmail/main.go @@ -123,6 +123,7 @@ func main() { imapServer := server.New(imapBackend) imapServer.Addr = *imapaddr imapServer.AllowInsecureAuth = true + imapServer.Debug = os.Stdout imapServer.EnableAuth(sasl.Login, func(conn server.Conn) sasl.Server { return sasl.NewLoginServer(func(username, password string) error { _, err := imapBackend.Login(nil, username, password) diff --git a/internal/imapserver/mailbox.go b/internal/imapserver/mailbox.go index 842798b..73ff288 100644 --- a/internal/imapserver/mailbox.go +++ b/internal/imapserver/mailbox.go @@ -22,6 +22,13 @@ type Mailbox struct { func (mbox *Mailbox) getIDsFromSeqSet(uid bool, seqSet *imap.SeqSet) ([]int32, error) { var ids []int32 for _, set := range seqSet.Set { + if set.Stop == 0 { + next, err := mbox.backend.Storage.MailNextID(mbox.user.username, mbox.name) + if err != nil { + return nil, fmt.Errorf("mbox.backend.Storage.MailNextID: %w", err) + } + set.Stop = uint32(next - 1) + } for i := set.Start; i <= set.Stop; i++ { if !uid { pid, err := mbox.backend.Storage.MailIDForSeq(mbox.user.username, mbox.name, int(i)) @@ -108,13 +115,16 @@ func (mbox *Mailbox) ListMessages(uid bool, seqSet *imap.SeqSet, items []imap.Fe return fmt.Errorf("mbox.getIDsFromSeqSet: %w", err) } + fmt.Println("FETCHING", ids, uid) + fmt.Println("SEQ SET", seqSet) + for _, id := range ids { mseq, mid, body, seen, answered, flagged, deleted, datetime, err := mbox.backend.Storage.MailSelect(mbox.user.username, mbox.name, int(id)) if err != nil { continue } - fetched := imap.NewMessage(uint32(id)+1, items) + fetched := imap.NewMessage(uint32(id), items) fetched.SeqNum = uint32(mseq) fetched.Uid = uint32(mid)