Задать вопрос
@anton11122211

Как удалить письмо через imap в golang?

Можете подсказать, как можно удалить конкретное письмо. Например есть
Message-ID: [<4155101611931742@mail.yandex.ru>]

Работаю через это расширение:
github.com/emersion/go-imap, но ничего не смог найти там.

Спасибо
  • Вопрос задан
  • 561 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Нужно сначала отметить сообщения как удалённые (установить флаг), потом вызвать 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")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы