一个比较通用的MIME解析器
最近做OCS与短信平台整合过程中,要对收到的邮件进行解析,发现现在的解析器都有这几个问题:
1 当邮件是传真邮件,语音邮件时 解析器不能识别Header部分的某一些字段(除了FROM.TO.SUBJECT.DATE...等),所以header部分应该是Hashtable
2 在对头部或者邮件正文进行解析是编码不能正确转换。比如邮件头中的subject有简体或者繁体就乱码
发现最好的解析器应该属于LumiSoft.Net.Mime了,但是这个解析器存在的问题是不能识别Header部分的某一些字段(除了FROM.TO.SUBJECT.DATE...等),
因此本人将它改进,对原文件进行分析后发现:如果将该源文件的 ParseHeaderField(headerfileds,headers)方法公开后还是能得到一些其他字段的Mime 。ParseHeaderField,这样柑橘不好的事你必须首先传输你要得到的字段,
string st = mimeparser.ParseHeaderField("Content-Class:", mimeparser.Headers).ToString().Trim();
为添加正则匹配header字段的到header的hashtable
internal static Hashtable parseHeaders(string partData)
{
Hashtable headerFields = new Hashtable();
string[] parts = Regex.Split(partData, DOUBLE_NEWLINE);
string headerString = parts[0] + DOUBLE_NEWLINE;
MatchCollection headerKeyCollectionMatch = Regex.Matches(headerString, @"^(?<key>\S*):", RegexOptions.Multiline);
string headerKey = null;
foreach (Match headerKeyMatch in headerKeyCollectionMatch)
{
headerKey = headerKeyMatch.Result("${key}");
Match valueMatch = Regex.Match(headerString, headerKey + @":(?<value>.*?)\r\n[\S\r]", RegexOptions.Singleline);
if (valueMatch.Success)
{
string headerValue = valueMatch.Result("${value}").Trim();
headerValue = Regex.Replace(headerValue, "\r\n", "");
headerValue = Regex.Replace(headerValue, @"\s+", " ");
// TODO: Duplicate headers (like Received) will be overwritten by the 'last' value.
headerFields[headerKey] =CDecode(headerValue);
}
}
return headerFields;
}
这样真个DLL编译为:
常用的一些字段可以使用 MimeParser mimeparser = new MimeParser(Encoding.Default.GetBytes(message.Data));
mimeparser.From/To/Subject/Date/MessageID/BCC/Cc...等得到 mimeparser.Headers 是头文件的string.
还可以使用Hashtable ht = mimeparser.headers; ht["Subject"] ht["Content-Class"]等来得到某一些字段
注意ht["To"]字段格式为 :XXX 《XXX@XXXX.COM》等,所以取地址的话进行字符串处理
int length1 = message.Headers["To"].ToString().IndexOf("<");
int length2 = message.Headers["To"].ToString().IndexOf(">");
string Toaddress = message.Headers["To"].ToString().Substring(length1 + 1, length2 - length1 - 1);
字段乱码的问题已解决了。
附上DLL和源文件:
大家有什么需要修改的欢迎给我反馈 。QQ476074295
posted on 2009-06-10 10:14 peter.deng 阅读(743) 评论(2) 编辑 收藏
