var c *client.Client
mbox, err := c.Select("INBOX", false)
if err != nil {
log.Fatal(err)
}
if mbox.Messages == 0 {
log.Fatal("No message in mailbox")
}
for _, message := range mbox.Messages {
deleteMessage(c, message.Uid)
}
func deleteMessage(c *client.Client, uid uint32) error {
seqset := new(imap.SeqSet)
seqset.AddNum(uid)
item := imap.FormatFlagsOp(imap.AddFlags, true)
flags := []interface{}{imap.DeletedFlag}
// отмечаем сообщение как удалённое
err := c.UidStore(seqset, item, flags, nil)
if err != nil {
return err
}
return c.Expunge(nil)
}
seqset := new(imap.SeqSet)
// тут вы в цикле получаете сообщение за сообщением.
for _, message := range mbox.Messages {
// тут вы делаете с сообщением то, что вам нужно
// чтобы удалить это сообщение, как и другие, которые вы в этом цикле прочитаете -
// добавляете Uid сообщения в set, а ниже будем использовать этот set для
// удаления всех прочитанных сообщений за один запрос.
seqset.AddNum(message.Uid)
}
// отмечаем все прочитанные сообщения как удалённые за один запрос к серверу
item := imap.FormatFlagsOp(imap.AddFlags, true)
flags := []interface{}{imap.DeletedFlag}
if err := c.UidStore(seqset, item, flags, nil); err != nil {
log.Fatal(err)
}
// удаляем все отмеченные сообщения за один запрос к серверу
if err := c.Expunge(nil); err != nil {
log.Fatal(err)
}
criteria := imap.NewSearchCriteria()
criteria.Before = time.Now().Add(time.Hour * 24)
s, err := c.UidSearch(criteria)
if err != nil {
// ...
}
seqSet := new(imap.SeqSet)
seqSet.AddNum(uids...)
// тут уже вызовы c.UidStore и c.Expunge