修复IMAP动态UID取值适配
Some checks are pending
Security Checks / security (push) Waiting to run

This commit is contained in:
smail 2026-09-06 07:50:11 +08:00
parent 44ef7a8771
commit 382abe55ac

View File

@ -143,10 +143,31 @@ func (s *serverSession) Fetch(w *imapserver.FetchWriter, numSet imap.NumSet, opt
case imap.UIDSet:
uidSet := numSet.(imap.UIDSet)
maxUID := 0
if uidSet.Dynamic() {
var err error
maxUID, err = list.GetMaxUIDByMailbox(s.ctx, s.currentMailbox)
if err != nil {
log.WithContext(s.ctx).WithError(err).Error("query IMAP maximum UID for fetch failed")
return &imap.Error{Type: imap.StatusResponseTypeNo, Text: "Fetch failed"}
}
}
for _, uid := range uidSet {
start := cast.ToInt(uint32(uid.Start))
end := cast.ToInt(uint32(uid.Stop))
if uid.Stop == 0 {
if uid.Start == 0 {
start = maxUID
end = maxUID
} else if maxUID == 0 || uid.Start > imap.UID(maxUID) {
continue
} else {
end = maxUID
}
}
emailList, err := list.GetEmailListByGroup(s.ctx, s.currentMailbox, list.ImapListReq{
Star: cast.ToInt(uint32(uid.Start)),
End: cast.ToInt(uint32(uid.Stop)),
Star: start,
End: end,
}, true)
if err != nil {
log.WithContext(s.ctx).WithError(err).Error("query IMAP messages for UID fetch failed")