中华网通行证
用户名 密码
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  

挽救Foxmail中的邮件
 邓富强 张海洋

Foxmail存在一个问题,就是文件和目录位置的关联性很强,我借别人的计算机使用Foxmail收取完了我的邮件,然后只将含有邮件的Mail文件夹拷贝到我的计算机的Foxmail中。这下却出了问题,在我的Foxmail中无论如何就是找不到邮件,我又忘了在收取邮件的计算机上Foxmail的安装目录。抱着试一试的心理,我用UltraEdit看了一下收件箱in.box内容,由于邮箱没有被压缩,我终于发现了in.box中的一个特征,就是每封邮件都以16进制串“10 10 10 10 10 10 10 11 11 11 11 11 11 53 0D 0A”进行分隔。根据这个特征,我用c语言编写了一个小程序,把in.box中的邮件都读取出来了,并保存为Outlook Express的eml格式。
由于在Foxmail中导出邮件的功能并不是很强,尤其是批量导出,不能保存为eml格式,这就使得要想用Outlook Express来阅读邮件,在Foxmail中必须一封一封进行导出,如果邮件数量太多,有上千封的话,那就太繁琐太浪费时间了,本程序对于in.box中的上千封邮件可以在几秒钟内导出完毕,能节省大量的时间。
为了使这个程序适合于各种C编译器,我按照ANSI C的标准使用各种函数,经过测试,这个程序在Turbo C 2.0、Borland C++ 3.1、Visual C++ 6.0下都能编译通过,正常运行。为了简化代码,本程序要求in.box放在“D:\net”目录中,如果放邮件的文件不是in.box,需要首先改名为in.box,导出的邮件放在“D:\net\1”目录中(D:\net\1目录必须存在)。大家可根据需要对程序进行改动,使之更符合自己的需要。
下面是源程序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int i,j; /*邮件计数,供生成输出文件名使用 */
FILE *fp1,*fp2; /* fp1为输入文件的指针*/
/*fp2为输出文件的指针 */
char c1, /*c1存放每次读取的字符 */
dest[100], /*dest存放完整的输出文件名 */
dest1[9]; /*将j转换字符串存放于dest1中 */
void takeout(); /* 读取分析分隔特征串 */
void newfp2(); /* 生成输出文件名 */
void initdest();
/*将dest和dest1中的元素全部清0 */

main()
{
i=0,j=0;
if((fp1=fopen("d:\\net\\in.box","r"))==NULL)
{
printf("Can't open d:\\net\\in.box");
exit(1);
}
c1=fgetc(fp1);
while(!feof(fp1))
{/*发现有分隔特征串的开头字符,则进*/
/* 入takeout()函数进行分析 */
if(c1=='\x10')
takeout();
newfp2(); /* 生成输出文件名 */
if((fp2=fopen(dest,"w"))==NULL)
{
printf("Can't open %s",dest);
exit(1);
}
/* 没有到输入文件的结尾,又不是分隔特征串 */
/* 的开头字符,则将字符写入输出文件 */
while(!feof(fp1)&&((c1=fgetc(fp1))!='\x10'))
fputc(c1,fp2);
}
return 0;
}

void initdest()
{
for(i=0;i<9;i++)
dest1[i]='\x0';
for(i=0;i<100;i++)
dest[i]='\x0';
}

void newfp2()
{
j++;
itoa(j,dest1,10);
/*生成相应的1.eml,2.eml...*/
strcpy(dest, "d:\\net\\1\\");
strcat(dest, dest1);
strcat(dest, ".eml");
}

void takeout()
{
for(i=0;i<6;i++)
{
c1=fgetc(fp1);
if(c1!='\x10')
return; /* 不符合分隔特征串,则返回 */
}
for(i=0;i<6;i++)
{
c1=fgetc(fp1);
if(c1!='\x11')
return; /*不符合分隔特征串,则返回 */
}
if((c1=fgetc(fp1))=='\x53')
if((c1=fgetc(fp1))=='\x0D')
if((c1=fgetc(fp1))=='\x0A')
{
c1=fgetc(fp1);
fclose(fp2); /* 完全符合特征串,则当前邮件 */
/* 输出完毕,关闭输出文件 */
}
}


  


 

更多本栏目内容
??Windows 2000系统安全设置攻略
??Dreamweaver编写CSS需要掌握的技巧
??使用Flash MX过程中的3个小技巧
??拖IE9网站图标到Win7任务栏 精彩好礼任你拿
??从此不再耗流量?Google离线地图试用
??给瑞星添加移动存储自动杀毒功能
??一周壁纸榜单 靓丽风景伴您欢度周末
??金山网络七款软件齐升级 炫丽界面贺新春
??提升网站流量和权重 百度热榜排第一
预警:电商促销引钓鱼 七夕网购需谨慎

本站检索



中华网推荐

·国家级治脑病新药思维源
·中藏药治疗脑病新突破
·治类风湿,强直性脊柱炎
·养肾·痛风·长寿
·肝病泌尿脑萎缩新药介绍
·强直性脊柱炎康复乐园
·让中医辩证不孕不育
·国医治股骨头坏死一绝
·乙肝为何久治不愈?
·二千元垄断批发做老板
·中医中药专治前列腺
·治牛皮癣白癜风已成现实
·专治痛风病的白衣天使
·不孕不育的杏林奇葩
·专卖店零售管理系统





   

网络教室编辑信箱