package mailx import ( "net/textproto" "sort" ) func Fields2Mimeheader(fields []Field) textproto.MIMEHeader { h := make(textproto.MIMEHeader) for _, field := range fields { h.Add(field.Name, field.Body) } return h } func Mimeheader2Fields(h textproto.MIMEHeader) []Field { seen := make(map[string]bool) var names []string for name := range h { name = textproto.CanonicalMIMEHeaderKey(name) if !seen[name] { names = append(names, name) } seen[name] = true } sort.Strings(names) var fields []Field for _, name := range names { for _, v := range h.Values(name) { fields = append(fields, Field{Name: name, Body: v,}) } } return fields }