aenetmail icon indicating copy to clipboard operation
aenetmail copied to clipboard

HeaderDictionary does not allow duplicate Headers

Open jvdvleuten opened this issue 12 years ago • 2 comments

When there is a duplicate Header, e.g. Delivered-To, the last header is taken.

Is there a reason that duplicate Headers are not all passed into the HeaderDictionary?

Is it not valid to have duplicate Headers in an email or was there another reason?

public static HeaderDictionary Parse(string headers, System.Text.Encoding encoding) {
            headers = Utilities.DecodeWords(headers, encoding);
            var temp = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
            var lines = headers.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            int i;
            string key = null, value;
            foreach (var line in lines) {
                if (key != null && (line[0] == '\t' || line[0] == ' ')) {
                    temp[key] += line.Trim();

                } else {
                    i = line.IndexOf(':');
                    if (i > -1) {
                        key = line.Substring(0, i).Trim();
                        value = line.Substring(i + 1).Trim();
                        temp.Set(key, value);
                    }
                }
            }

            var result = new HeaderDictionary();
            foreach (var item in temp) {
                result.Add(item.Key, new HeaderValue(item.Value));
            }
            return result;
        }

jvdvleuten avatar Mar 12 '13 11:03 jvdvleuten

It's perfectly valid for messages to have duplicate headers, especially for headers such as "Received:", "To:", and "Cc:".

I would highly recommend replacing the MIME parser in AENetMail with MimeKit as it properly handles this and many other cases.

jstedfast avatar Jan 11 '14 17:01 jstedfast