Нужно сначала отметить сообщения как удалённые (установить флаг), потом вызвать Expunge.
В документации написано, что если вызвать Close - то сообщения, отмеченные как удалённые, будут удалены, но я не проверял :)
Вот тут есть пример:
https://godocs.io/github.com/emersion/go-imap/clie...
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")
}
seqset := new(imap.SeqSet)
for _, message := range mbox.Messages {
// если сообщение должно быть удалено - тогда вызываете AddNum
// используем именно message.Uid а не message.SeqNum потому, что ниже мы будем вызывать UidStore, а не Store, так будет явно надёжнее
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)
}
log.Println("Last message has been deleted")