上一篇 | 下一篇

高手必修:关于FoxMail的深入研究

发布: 2008-6-26 14:10 | 作者: admin | 来源: | 查看: 0次

  现在使用FoxMail的用户越来越多了,但是FoxMail却不像OutLook一样给编程人员提供开发接口。我认为这对一个好的软件的推广来说是很不利的。前几个月小弟由于开发需要对FoxMail进行了以下研究,这几天闲下来将材料整理了一下,供大家参考。我使用FoxMail4.2进行研究,但是在FoxMail5.0推出后,我也进行了测试,仍然使用。

   FoxMail的数据保存,都是由两个文件组成 .Ind 和 .Box的文件,Ind 文件主要记录简单信息,以及详细信息在.Box文件中的起始位置。

   地址簿:

   默认情况下,FoxMail的地址簿由两个文件组成,Address.ind 和 Address.box。

   Address.Ind文件

   文件头的范围为00H-39H,共64个字节。

   05H保存纪录的个数,12H-21H记录地址薄名称。

   记录部分40H开始是第一条记录,每条记录长B0H

   每条记录的00H是记录号(从01开始顺序编号),04H是删除标记,该字节为1表明此记录被用户删除(由此可见在FoxMail中删除的信息没有被真正的删除)

   05H06H纪录在.BOX中的地址如 [05H]=01,[06H]=EA 那么该项纪录的详细信息被保存在Address.Box文件中起始位置为01FA

   09H0AH此记录在.Box文件中详细信息的字节数目加上156H(记录整条记录在Box文件中的总长度)

   11H是组记录,该字节为1表明此记录为一条组记录;(我没有对此项进行详细研究)

   12H是此项纪录名称的长度,最大为20H;

   13H-32H是此项纪录名称的内容

   33H是邮件地址长度,最大为40H

   34H-73H是邮件地址内容

   Address.Box文件

   每条记录由“_____________S”开始,后加一回车符(0A0D)

   紧接着是详细信息,分别由以下几项组成(按顺序排列)

   Emails

   Mobile

   PagerNum

   OICQ

   ICQ

   HomePage

   Sex

   Birthday

   FmCountry

   FmProvince

   FmCity

   FmPostcode

   FmStreetAddr

   HomeTel

   HomeTel2

   FmFax

   Company

   OfCountry

   OfProvince

   OfCity

   PostCode

   HomeAddress

   OfHomePage

   OfPosition

   OfDepartment

   OfficeTel

   OfficeTel2

   Fax

   构造格式:名称 + 冒号 + 0A0D + 信息内容 + 0A0D

   最后一项构造完成 要加入2个 0A0D

   实例1:

   从FoxMail中遍历地址簿联系人姓名和EMail信息:

   bool GoAll(char *szFileNameOfInd)

   char headbuf[0x41]; // 头buf

   char recbuf[0xb1]; // 内容buf

   FILE* pf=fopen(szFileNameOfInd,"rb");

   fseek(pf,0x40,SEEK_SET); // 到项目开始

   while(!feof(pf))

   {

   char name[0x21],email[0x41]; // 定义存储姓名和email的字符数组

   for(i=0;i<0x21;i++)

   name[i]='\0';

   for(i=0;i<0x41;i++)

   email[i]='\0';

   fread(recbuf,1,0xb0,pf); // 读取一条记录

   if(recbuf[0x4]==1) // 判断删除标志

   {

   continue;

   }

   if(recbuf[0x11]==1) // 判断组标志

   {

   continue;

   }

   for(i=0;i

   {

   if(recbuf[i+0x13]==0)

   break;

   name[i]=recbuf[i+0x13];

   }

   for(i=0;i

   {

   if(recbuf[i+0x34]==0)

   break;

   email[i]=recbuf[i+0x34];

   }

   //此处添加处理name(收件人名),email(收件人地址)的程序

   return true;

   }

   实例2:

   向地址簿中添加一条记录信息,没有给出全部代码。

   1. 得到文件头

   BOOL GetIndFileHead(char* szheadbuf) // 得到文件头部的函数

   {

   fseek(FoxWriter_pf_addr,0x0,SEEK_SET);

   long len=0;

   len=fread(szheadbuf,1,0x40,FoxWriter_pf_addr);

   if(len==0)

   return FALSE;

   return TRUE;

   }

   2. 修改项目数;

   int itemcount=szheadbuf[0x5];

   itemcount++;

   szheadbuf[0x5]=itemcount;

字号: | 推荐给好友

31/3123>

评分:0

我来说两句