diff options
Diffstat (limited to 'plugins/base/imap.go')
-rwxr-xr-x | plugins/base/imap.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/plugins/base/imap.go b/plugins/base/imap.go index 09ae305..0c39ca6 100755 --- a/plugins/base/imap.go +++ b/plugins/base/imap.go @@ -35,6 +35,30 @@ func listMailboxes(conn *imapclient.Client) ([]*imap.MailboxInfo, error) { return mailboxes, nil } +func getMailboxByAttribute(conn *imapclient.Client, attr string) (*imap.MailboxInfo, error) { + ch := make(chan *imap.MailboxInfo, 10) + done := make(chan error, 1) + go func() { + done <- conn.List("", "%", ch) + }() + + var mailbox *imap.MailboxInfo + for mbox := range ch { + for _, a := range mbox.Attributes { + if attr == a { + mailbox = mbox + break + } + } + } + + if err := <-done; err != nil { + return nil, fmt.Errorf("failed to get mailbox with attribute %q: %v", attr, err) + } + + return mailbox, nil +} + func ensureMailboxSelected(conn *imapclient.Client, mboxName string) error { mbox := conn.Mailbox() if mbox == nil || mbox.Name != mboxName { @@ -339,3 +363,15 @@ func getMessagePart(conn *imapclient.Client, mboxName string, uid uint32, partPa return &IMAPMessage{msg}, part, nil } + +func markMessageAnswered(conn *imapclient.Client, mboxName string, uid uint32) error { + if err := ensureMailboxSelected(conn, mboxName); err != nil { + return err + } + + seqSet := new(imap.SeqSet) + seqSet.AddNum(uid) + item := imap.FormatFlagsOp(imap.AddFlags, true) + flags := []interface{}{imap.AnsweredFlag} + return conn.UidStore(seqSet, item, flags, nil) +} |