/// <summary>
/// Parses the header.
/// </summary>
/// <param name="header">The header.</param>
public static void ParseHeader(ref Header header)
{
#if !PocketPC
string hdr = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(header.OriginalData, 0, header.OriginalData.Length);
#else
string hdr = Pop3Client.PPCEncode.GetString(header.OriginalData, 0, header.OriginalData.Length);
#endif
hdr = System.Text.RegularExpressions.Regex.Match(hdr, @"[\s\S]+?((?=\r?\n\r?\n)|\Z)").Value;
hdr = Parser.Unfold(hdr);
//hdr = hdr);
System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(hdr, @"(?<=((\r?\n)|\n)|\A)\S+:(.|(\r?\n[\t ]))+(?=((\r?\n)\S)|\Z)");
while (m.Success)
{
string name = FormatFieldName(m.Value.Substring(0, m.Value.IndexOf(':')));
string value = Codec.RFC2047Decode(m.Value.Substring(m.Value.IndexOf(":") + 1)).Trim('\r', '\n').TrimStart(' ');
if (name.Equals("received"))
{
header.Trace.Add(Parser.ParseTrace(m.Value.Trim(' ')));
}
else if (name.Equals("to"))
{
header.To = Parser.ParseAddresses(value);
}
else if (name.Equals("cc"))
{
header.Cc = Parser.ParseAddresses(value);
}
else if (name.Equals("bcc"))
{
header.Bcc = Parser.ParseAddresses(value);
}
else if (name.Equals("reply-to"))
{
header.ReplyTo = Parser.ParseAddress(value);
}
else if (name.Equals("from"))
{
header.From = Parser.ParseAddress(value);
}
else if (name.Equals("sender"))
{
header.Sender = Parser.ParseAddress(value);
}
else if (name.Equals("content-type"))
{
header.ContentType = Parser.GetContentType(m.Value);
}
else if (name.Equals("content-disposition"))
{
header.ContentDisposition = Parser.GetContentDisposition(m.Value);
}
//else
//{
header.HeaderFields.Add(name, value);
header.HeaderFieldNames.Add(name, m.Value.Substring(0, m.Value.IndexOf(':')));
//}
m = m.NextMatch();
if (HeaderFieldParsing != null)
{
HeaderFieldParsing(null, header);
}
}
}