Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 71 additions & 7 deletions fetcher/fetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,13 @@ func FetchMailboxEmails(account *config.Account, mailbox string, limit, offset u
if fetchEmail == "" {
fetchEmail = strings.ToLower(strings.TrimSpace(account.Email))
}
isSentMailbox := mailbox == getSentMailbox(account)
// Resolve the sent mailbox name dynamically so localized names (e.g.
// "Verzonden items" on Dutch Exchange) are recognized as the Sent folder.
sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}
isSentMailbox := mailbox == sentMailbox

// Delivery header section for matching auto-forwarded emails
deliveryHeaderSection := &imap.FetchItemBodySection{
Expand Down Expand Up @@ -1567,39 +1573,94 @@ func FetchEmails(account *config.Account, limit, offset uint32) ([]Email, error)
}

func FetchSentEmails(account *config.Account, limit, offset uint32) ([]Email, error) {
return FetchMailboxEmails(account, getSentMailbox(account), limit, offset)
c, err := connect(account)
if err != nil {
return nil, err
}
defer c.Close() //nolint:errcheck

sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}

return FetchMailboxEmails(account, sentMailbox, limit, offset)
}

func FetchEmailBody(account *config.Account, uid uint32) (string, string, []Attachment, error) {
return FetchEmailBodyFromMailbox(account, "INBOX", uid)
}

func FetchSentEmailBody(account *config.Account, uid uint32) (string, string, []Attachment, error) {
return FetchEmailBodyFromMailbox(account, getSentMailbox(account), uid)
c, err := connect(account)
if err != nil {
return "", "", nil, err
}
defer c.Close() //nolint:errcheck

sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}

return FetchEmailBodyFromMailbox(account, sentMailbox, uid)
}

func FetchAttachment(account *config.Account, uid uint32, partID string, encoding string) ([]byte, error) {
return FetchAttachmentFromMailbox(account, "INBOX", uid, partID, encoding)
}

func FetchSentAttachment(account *config.Account, uid uint32, partID string, encoding string) ([]byte, error) {
return FetchAttachmentFromMailbox(account, getSentMailbox(account), uid, partID, encoding)
c, err := connect(account)
if err != nil {
return nil, err
}
defer c.Close() //nolint:errcheck

sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}

return FetchAttachmentFromMailbox(account, sentMailbox, uid, partID, encoding)
}

func DeleteEmail(account *config.Account, uid uint32) error {
return DeleteEmailFromMailbox(account, "INBOX", uid)
}

func DeleteSentEmail(account *config.Account, uid uint32) error {
return DeleteEmailFromMailbox(account, getSentMailbox(account), uid)
c, err := connect(account)
if err != nil {
return err
}
defer c.Close() //nolint:errcheck

sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}

return DeleteEmailFromMailbox(account, sentMailbox, uid)
}

func ArchiveEmail(account *config.Account, uid uint32) error {
return ArchiveEmailFromMailbox(account, "INBOX", uid)
}

func ArchiveSentEmail(account *config.Account, uid uint32) error {
return ArchiveEmailFromMailbox(account, getSentMailbox(account), uid)
c, err := connect(account)
if err != nil {
return err
}
defer c.Close() //nolint:errcheck

sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}

return ArchiveEmailFromMailbox(account, sentMailbox, uid)
}

// AppendToSentMailbox appends a raw RFC822 message to the Sent mailbox via IMAP APPEND.
Expand All @@ -1610,7 +1671,10 @@ func AppendToSentMailbox(account *config.Account, rawMsg []byte) error {
}
defer c.Close() //nolint:errcheck

sentMailbox := getSentMailbox(account)
sentMailbox, err := getMailboxByAttr(c, imap.MailboxAttrSent)
if err != nil {
sentMailbox = getSentMailbox(account)
}
appendCmd := c.Append(sentMailbox, int64(len(rawMsg)), &imap.AppendOptions{
Flags: []imap.Flag{imap.FlagSeen},
Time: time.Now(),
Expand Down
Loading