Use header-only IMAP lists
This commit is contained in:
parent
a52963c380
commit
a17d2c8a2c
5 changed files with 456 additions and 184 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue