package imap import ( "strings" "github.com/emersion/go-imap/v2" ) func isAllowedFlag(flag imap.Flag) bool { if len(flag) == 0 { // RFC 9051 requires one or more characters return false } // system flags start with "\" and are defined per RFC 9051 if strings.HasPrefix(string(flag), "\\") { switch flag { // \Recent was deprecated in IMAP 4 rev.2 case imap.FlagSeen, imap.FlagAnswered, imap.FlagFlagged, imap.FlagDeleted, imap.FlagDraft: return true default: return false } } // Clients are generally free in adding keywords return true } func toIMAPFlags(flags []string) []imap.Flag { out := make([]imap.Flag, 0, len(flags)) for _, flag := range flags { if flag == "" { continue } out = append(out, imap.Flag(flag)) } if len(out) == 0 { return nil } return out } func fromIMAPFlags(flags []imap.Flag) []string { out := make([]string, 0, len(flags)) for _, f := range flags { if string(f) == "" { continue } out = append(out, string(f)) } return out }