diff --git a/internal/imapx/account.go b/internal/imapx/account.go index fc735d3..4b9792c 100644 --- a/internal/imapx/account.go +++ b/internal/imapx/account.go @@ -2,8 +2,23 @@ package imapx import ( "context" + + "github.com/emersion/go-imap/v2/imapclient" ) +// ListFolders returns the mailbox names visible on an already-connected, logged-in client. +func ListFolders(c *imapclient.Client) ([]string, error) { + mboxes, err := c.List("", "*", nil).Collect() + if err != nil { + return nil, err + } + names := make([]string, 0, len(mboxes)) + for _, m := range mboxes { + names = append(names, m.Mailbox) + } + return names, nil +} + func TestLogin(ctx context.Context, ep Endpoint, login, pass string) ([]string, error) { c, err := Connect(ctx, ep) if err != nil { diff --git a/internal/orchestrator/orchestrator.go b/internal/orchestrator/orchestrator.go index de34e44..efbebdd 100644 --- a/internal/orchestrator/orchestrator.go +++ b/internal/orchestrator/orchestrator.go @@ -174,7 +174,7 @@ func (o *Orchestrator) runAccount(ctx context.Context, task store.Task, runID in return o.accountFailed(ctx, task.ID, a.ID, err) } - folders, err := imapx.TestLogin(ctx, srcEP, a.SrcLogin, string(srcPass)) + folders, err := imapx.ListFolders(src) if err != nil { return o.accountFailed(ctx, task.ID, a.ID, err) }