Use header-only IMAP lists

This commit is contained in:
DonVoo 2026-07-14 18:23:31 +02:00
parent a52963c380
commit a17d2c8a2c
5 changed files with 456 additions and 184 deletions

View file

@ -490,23 +490,33 @@ func findTargetIMAPCopy(account, targetAccount string, raw []byte) (forwardedMat
}
func scanTargetForMessage(dst TargetMailbox, targetUser, messageID string) (forwardedMatch, bool, error) {
messageID = normalizeMessageID(messageID)
folders, err := dst.Folders()
if err != nil {
return forwardedMatch{}, false, err
}
for _, folder := range folders {
msgs, err := dst.Fetch(folder.Name)
if err != nil {
continue
}
for i, msg := range msgs {
if msg.MessageID == messageID || messageIDHeader(msg.Body) == messageID {
return forwardedMatch{
Account: "Ziel: " + targetUser,
Folder: folder.Name,
Index: i,
Raw: msg.Body,
}, true, nil
for offset := 0; ; offset += mailboxListLimit {
headers, err := dst.Headers(folder.Name, mailboxListLimit, offset)
if err != nil {
break
}
if len(headers) == 0 {
break
}
for i, header := range headers {
if normalizeMessageID(header.MessageID) == messageID {
msg, err := dst.FetchOne(folder.Name, header.UID)
if err != nil {
continue
}
return forwardedMatch{
Account: "Ziel: " + targetUser,
Folder: folder.Name,
Index: offset + i,
Raw: msg.Body,
}, true, nil
}
}
}
}
@ -560,7 +570,7 @@ func messageIDHeader(raw []byte) string {
if err != nil {
return ""
}
return strings.TrimSpace(msg.Header.Get("Message-ID"))
return normalizeMessageID(msg.Header.Get("Message-ID"))
}
func renderTargetAccountSelect(account, folder, selected string, index int) string {