From 1c8a600d79e1011fa566896535aa1f426c8424bd Mon Sep 17 00:00:00 2001 From: smail Date: Sun, 6 Sep 2026 08:07:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98IMAP=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=E8=AF=8A=E6=96=AD=E6=A3=80=E6=9F=A5=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/listen/imap_server/session_fetch.go | 3 +++ backend/services/list/list.go | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/backend/listen/imap_server/session_fetch.go b/backend/listen/imap_server/session_fetch.go index 16084f6..028b667 100644 --- a/backend/listen/imap_server/session_fetch.go +++ b/backend/listen/imap_server/session_fetch.go @@ -166,6 +166,7 @@ func (s *serverSession) Fetch(w *imapserver.FetchWriter, numSet imap.NumSet, opt end = maxUID } } + log.WithContext(s.ctx).Infof("IMAP FETCH UID range start=%d end=%d mailbox=%s", start, end, s.currentMailbox) emailList, err := list.GetEmailListByGroup(s.ctx, s.currentMailbox, list.ImapListReq{ Star: start, End: end, @@ -174,6 +175,7 @@ func (s *serverSession) Fetch(w *imapserver.FetchWriter, numSet imap.NumSet, opt log.WithContext(s.ctx).WithError(err).Error("query IMAP messages for UID fetch failed") return &imap.Error{Type: imap.StatusResponseTypeNo, Text: "Fetch failed"} } + log.WithContext(s.ctx).Infof("IMAP FETCH UID result count=%d", len(emailList)) if err := write(s.ctx, w, emailList, options); err != nil { return err } @@ -319,6 +321,7 @@ func write(ctx *context.Context, w *imapserver.FetchWriter, emailList []*respons if options.UID { writer.WriteUID(uid) } + log.WithContext(ctx).Infof("IMAP FETCH write sequence=%d uid=%d ue_id=%d", sequence, uid, email.UeId) if options.Envelope { env := buildEnvelope(email, traEmail) writer.WriteEnvelope(env) diff --git a/backend/services/list/list.go b/backend/services/list/list.go index ff6662b..c84b4a0 100644 --- a/backend/services/list/list.go +++ b/backend/services/list/list.go @@ -270,6 +270,13 @@ func getEmailListByUidList(ctx *context.Context, groupName string, req ImapListR if err := db.Instance.SQL(sql, params...).Find(&relations); err != nil { return nil, fmt.Errorf("query mailbox UID list: %w", err) } + if len(relations) > 0 { + for _, relation := range relations { + if relation != nil { + fmt.Printf("IMAP UID relation id=%d email_id=%d status=%d group_id=%d\n", relation.ID, relation.EmailID, relation.Status, relation.GroupId) + } + } + } return hydrateIMAPEmailResponses(relations) } @@ -330,6 +337,7 @@ func hydrateIMAPEmailResponses(relations []*response.UserEmailUIDData) ([]*respo if err := db.Instance.Table("email").Select("*").Where(Eq{"id": emailIDs}).Find(&stored); err != nil { return nil, fmt.Errorf("query mailbox messages: %w", err) } + fmt.Printf("IMAP hydrate email_ids=%v stored=%d\n", emailIDs, len(stored)) messageByID := make(map[int]*response.EmailResponseData, len(stored)) for _, message := range stored { if message != nil {