程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> 高手必修:關於FoxMail的深入研究

高手必修:關於FoxMail的深入研究

編輯:VC++

    現在使用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;
  
  3. 修改項目代號
  
  szbuf[0x0]=itemcount;
  
  4. 創建項目名稱
  
  szbuf[0x12]=strlen(strItemName);

  for(i=0;i<0x20;i++)
  
  szbuf[i+0x13]=strItemName[i];
  
  5. 創建項目email
  
  szbuf[0x33]=strlen(strEmails);
  
  for(i=0;i<0x40;i++)
  
  szbuf[i+0x34]=strEmails[i];
  
  6. 構造Box文件buf
  
  (略)
  
  7. 創建項目對Box文件指針
  
  char* pbuf=szbuf;
  
  pbuf++;
  
  short* pshbuf=(short*)pbuf;
  
  pshbuf[0x2]=point;
  
  8. 創建項目字數值
  
  long len=strlen(szBoxbuf)
  
  len+=0x156;
  
  9. 保存Ind和Box文件
  
  (未完,將繼續整理關於FoxMail發件箱收件箱信息提取的研究)

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved