// findUnreadEmails will run a find the UIDs of any unread emails in the // mailbox. func findUnreadEmails(conn *imap.Client) (*imap.Command, error) { // get headers and UID for UnSeen message in src inbox... cmd, err := imap.Wait(conn.UIDSearch("UNSEEN")) if err != nil { return &imap.Command{}, err } return cmd, nil }
func archive(c *imap.Client, thrid string) error { cmd, err := imap.Wait(c.UIDSearch("X-GM-THRID", thrid)) if err != nil { log.Println(err) return ErrBadConnection } if len(cmd.Data) == 0 { return nil } var set imap.SeqSet set.AddNum(cmd.Data[0].SearchResults()...) _, err = imap.Wait(c.UIDStore(&set, "+FLAGS.SILENT", `(\Deleted)`)) return err }
// loadMessages will search and fetch message body func loadMessages(client *imap.Client, config *Config) error { cmd, err := imap.Wait(client.UIDSearch("FROM", client.Quote(config.From), "UNSEEN")) if err != nil { return err } seq := new(imap.SeqSet) if len(cmd.Data) > 0 { seq.AddNum(cmd.Data[0].SearchResults()...) } if seq.Empty() { return nil } logger.Infof("Fetched UIDs %v", seq) cmd, err = imap.Wait(client.UIDFetch(seq, "FLAGS", "INTERNALDATE", "RFC822.SIZE", "BODY[]")) if err != nil { return err } for _, rsp := range cmd.Data { body, err := fetchMessage(client, rsp.MessageInfo().UID) if err != nil { logger.Fatal(err) return err } err = writeFileFromBody(bytes.NewReader(body), config) if err != nil { logger.Fatal(err) return err } } if !seq.Empty() { _, err = imap.Wait(client.UIDStore(seq, "+FLAGS.SILENT", imap.NewFlagSet(`\Seen`))) } cmd.Data = nil return err }
// findEmails will run a find the UIDs of any emails that match the search.: func findEmails(client *imap.Client, search string, since *time.Time) (*imap.Command, error) { var specs []imap.Field if len(search) > 0 { specs = append(specs, search) } if since != nil { sinceStr := since.Format(dateFormat) specs = append(specs, "SINCE", sinceStr) } // get headers and UID for UnSeen message in src inbox... cmd, err := imap.Wait(client.UIDSearch(specs...)) if err != nil { return &imap.Command{}, fmt.Errorf("uid search failed: %s", err) } return cmd, nil }