• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#打开eml

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

分开邮件的各个部分,应该是用正则了.分开之后,对内容做读取的时候,需要用base64和qp两种解码,要根据邮件相关信息来确定具体用哪一种.

一般邮件获取内容编码方式的正则的写法应该是下面这个样子

C# code
private const string encodingReg = "(?<=(Content\\-Transfer\\-Encoding\\:)).*";


做一个TextAnalyze方法来统筹分析

C# code
//c 内容 //charset,文字编码方式,utf-8/gb2312等等 //encoding,加密编码方式,包括qp和base64两种 //因为encoding获得的加密编码标志可能不同,所以用了switch. private string TextAnalyze(string c, string charset, string encoding) { switch (encoding.ToLower()) { case "quoted-printable": case "qp": case "q": try { c = QDecode(Encoding.GetEncoding(charset), c); } catch (Exception e) { throw new Exception("TextAnalyze(quoted-printabl)" + e.Message); } break; case "base64": case "b": try { c = DecodeBase64(charset, encoding); } catch (Exception e) { throw new Exception("TextAnalyze(DecodeBase64)" + e.Message); } break; } return c; }


base64在c#中处理很简单了,就放一个qp的解码.这个也是在网上辛苦搜到的.当时自己水平太凹,总编不好.

C# code
/// <summary> /// quoted-printable解码程序. /// </summary> /// <param name="encoding">解码目标字符集</param> /// <param name="data">需要解码的字符串</param> /// <returns></returns> private static string QDecode(System.Text.Encoding encoding, string data) { MemoryStream strm = new MemoryStream(System.Text.Encoding.Default.GetBytes(data)); int b = strm.ReadByte(); MemoryStream dStrm = new MemoryStream(); while (b > -1) { // Hex eg. =E4 if (b == '=') { byte[] buf = new byte[2]; strm.Read(buf, 0, 2); if (!(buf[0] == '\r' && buf[1] == '\n')) { int val = int.Parse(System.Text.Encoding.Default.GetString(buf), System.Globalization.NumberStyles.HexNumber); //int val = int.Parse(System.Text.Encoding.Default.GetString(buf)); byte[] temp = new Byte[] { (byte)val }; dStrm.Write(temp, 0, temp.Length); } } else { string encodedChar = encoding.GetString(new byte[] { (byte)b }); byte[] d = System.Text.Encoding.Default.GetBytes(encodedChar); dStrm.Write(d, 0, d.Length); } b = strm.ReadByte(); } return encoding.GetString(dStrm.ToArray()); }


当时对我来讲最困难的就是qp这部分了,这部分解决之后其他的都很好办的.不知道你什么情况.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中预定义的值类型有哪些发布时间:2022-07-14
下一篇:
C#数组随机生成四个随机数发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap