GO-IMAP. Как удалить все флаги, которые не являются стандартными (например: $MDNSent)?

В языке программирования Go существует пакет "net/mail" для работы с почтовыми протоколами, включая IMAP. Для удаления флагов, которые не являются стандартными, вам потребуется использовать IMAP клиент и выполнить необходимые запросы.

Ниже приведен пример кода на языке Go, который показывает, как удалить все флаги, не являющиеся стандартными, с помощью пакета "net/mail" и IMAP клиента:

package main

import (
    "log"
    "net/mail"
    "net/textproto"

    "github.com/emersion/go-imap"
    "github.com/emersion/go-imap/client"
)

func main() {
    // Подключение к серверу IMAP
    imapClient, err := client.DialTLS("imap.example.com:993", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer imapClient.Logout()

    // Аутентификация пользователя
    if err := imapClient.Login("[email protected]", "password"); err != nil {
        log.Fatal(err)
    }

    // Выбор почтового ящика
    mailbox, err := imapClient.Select("INBOX", false)
    if err != nil {
        log.Fatal(err)
    }

    // Получение списка сообщений
    seqSet := new(imap.SeqSet)
    seqSet.AddRange(1, mailbox.Messages)

    // Запросить сообщения
    messages := make(chan *imap.Message, 1)
    done := make(chan error, 1)
    go func() {
        done <- imapClient.Fetch(seqSet, []imap.FetchItem{imap.FetchFlags}, messages)
    }()

    // Обработка полученных сообщений
    for msg := range messages {
        // Создание объекта письма из полученного сообщения
        email, err := mail.ReadMessage(msg.GetBody("HEADERS"))
        if err != nil {
            log.Fatal(err)
        }

        // Проверка флагов письма и удаление нестандартных флагов
        for flagName, _ := range msg.Flags {
            if !isStandardFlag(flagName) {
                err = imapClient.Store(seqSet, textproto.TrimBytesPrefix(msg.Uid), "+FLAGS.SILENT", imap.RemoveFlag(flagName), nil)
                if err != nil {
                    log.Println("Failed to remove flag:", err)
                }
            }
        }
    }

    // Проверка ошибки при получении сообщений
    if err := <-done; err != nil {
        log.Fatal(err)
    }
}

// Функция проверки является ли флаг стандартным или нет
func isStandardFlag(flagName string) bool {
    // Список стандартных флагов
    standardFlags := map[string]bool{
        "\Seen":      true,
        "\Answered":  true,
        "\Flagged":   true,
        "\Deleted":   true,
        "\Draft":     true,
        "\Recent":    true,
    }

    return standardFlags[flagName]
}

В этом примере мы используем пакеты "github.com/emersion/go-imap" и "github.com/emersion/go-imap/client" для взаимодействия с сервером IMAP и получения списка сообщений. Затем мы проверяем каждое сообщение на наличие флагов, и если флаг не является стандартным (определенным в функции isStandardFlag), мы выполняем запрос на удаление этого флага с помощью функции imapClient.Store.