• 对MIME格式的邮件文件进行解码获取其可读内容和附件等


    这几天需要将一个OA系统X的所有邮件导入到OA系统Y,X的所有邮件采用MIME格式的文件保存在磁盘上,因此我需要读取这些文件的内容,并解析出其中的所有相关内容然后导入到Y中。对于纯文本的邮件还好说,麻烦的是那种带Html格式或者带有附件的邮件,经过网上翻箱倒柜般的一顿搜索,最终发现了一份可以利用的源代码,其中我需要的是NET目录下的那个项目的MIME部分。
    但是经过测试,其中有一点问题,主要是对中文的支持和对字节数的计算问题,经过我的修改和把一些我不需要的功能剔出,得到一个“MimeDecoder”,其中程序集的名字原来是LumiSoft.Net.dll,我重新编译为MimeDecoder.dll,保留了原作者的命名空间,不知道这么做是否有悖“道义”?我不是很懂那些开源协议,如果做法不妥或者还欠缺什么,请懂得人给我个建议,谢谢。
    这个MimeDecoder的基本用法是这样的:

    //读取邮件内容
                FileStream fs = File.OpenRead("MyMimeFile.in");
                
    byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 
    0, (int)fs.Length);
                fs.Close();

                
    //分析邮件内容
                LumiSoft.Net.Mime.MimeParser p = new MimeParser(buffer);
                MessageBox.Show(p.Subject);
                MessageBox.Show(p.BodyText);
                Response.Write((p.MimeEntries[i] 
    as MimeEntry).FileName + "<br>");
                
    foreach (MimeEntry entry in p.MimeEntries)    //原作者的MimeEntries用ArrayList,可能是针对.NET 1.1写的,我把他修改成了List<MimeEntry>,方便使用
                {
                    
    if (false == string.IsNullOrEmpty(entry.FileName))    //这里我们只保存附件
                    {
                        fs 
    = File.Create(entry.FileName);
                        fs.Write(entry.Data, 
    0, entry.Data.Length);
                        fs.Close();
                    }
                }

    用法还是比较简单的。
    由于赶时间,这个类库修改后是否还有其他问题还没有仔细测试(但是绝对不是没测试过),如果再发现新问题并解决之后,我会及时更新这里。
    最后,非常感谢这套类库的原作者Ivar Lumi,解决了我的大问题。
    这里是我修改后的类库的源代码 ,发布在首页,给所有需要的人,如果不合适在首页,告诉我,我换个分类。
  • 相关阅读:
    自定义提示框(alert、confirm 可自定义标题 内容 图标 取消按钮)
    Node.js 技術
    ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)
    Memcached 命令简介
    MySQL 请选择合适的列
    WCF光芒下的Web Service
    如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
    SOA面向服务架构简述
    Python Web 框架, 使用 Django 和 Python 开发 Web 站点
    Interface继承至System.Object?
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/929298.html
Copyright © 2020-2023  润新知