对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,解决了我的大问题。
这里是我修改后的类库的 源代码 ,发布在首页,给所有需要的人,如果不合适在首页,告诉我,我换个分类。

转载于:https://www.cnblogs.com/Ricky81317/archive/2007/10/19/929298.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值