欢迎光临
我们一直在努力

C#中对POP3邮件解码-.NET教程,C#语言

建站超值云服务器,限时71元/月

base64和下面将要介绍的quoted-printable都属于mime

(多部分( multi-part)、多媒体电子邮件和 www 超文本的

一种编码标准,用于传送诸如图形、声音和传真等非文本数

据)。mime定义在rfc1341中。

base64是现今在互联网上应用最多的一种编码,几乎所

有的电子邮件软件头把它作为默认的二进制编码,它已经成

了现今电子邮件编码的代名词。

下面是base64的一个例子,从例子中,您也可以看到

base64与电子邮件的的紧密联系:

content-type: text/plain;charset="cn-gb"

content-transfer-encoding: base64

cqkjicagikg2wtlc68vjt6i088irobcncgnx99xfom1vz2fvo6yw19tgu8a619w+o6h0zwxuzxq6

ly8ymdiumteyljiwljezmjoym6ops8nusagjdqojicagicagxkq438jtvp65pnf3ytkjumh0dha6

ly9tb2dhby5izw50axvulm5lda0kcqkjrw1hawx0bzptb2dhb0aznzeubmv0dqojicagkioqkioq

kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqicagicagicagicagicagdqoj

icagkicz/chlvmfs5mqyw7s2vlk7tpjx36oss/3by9fjvkpksso0tryyu8h0z8iqdqojicagkioq

kioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioqkioq

你可以把它单独存成一个文件,可以取名为:mogao.eml,

双击可以用outlook打开(前两行为邮件的原始信息,从第四行

开始为编码内容)。

base64的算法同uuencode的算法很接近,也很简单:它将

字符流顺序放入一个 24 位的缓冲区,缺字符的地方补零。然

后将缓冲区截断成为 4 个部分,高位在先,每个部分 6 位,

用下面的64个字符重新表示:"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv

wxyz0123456789+/"。

如果输入只有一个或两个字节,那么输出将用等号"="补足。

这可以隔断附加的信息造成编码的混乱。它每行一般为76个字符。

下面我给出base64的编码和解码的c语言描述:

/*base64编码*/

void base64(unsigned char chasc[3],unsigned char chuue[4])

/*

chasc:未编码的二进制代码

chuue:编码过的base64代码

*/

{

int i,k=2;

unsinged char t=null;

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

{

*(chuue+i)=*(chasc+i)>>k;

*(chuue+i)|=t;

t=*(chasc+i)<<(8-k);

t>>=2;

k+=2;

}

*(chuue+3)=*(chasc+2)&63;

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

if((*(chuue+i)>=0)&&(*(chuue+i)<=25)) *(chuue+i)+=65;

else if((*(chuue+i)>=26)&&(*(chuue+i)<=51)) *(chuue+i)+=71;

else if((*(chuue+i)>=52)&&(*(chuue+i)<=61)) *(chuue+i)-=4;

else if(*(chuue+i)==62) *(chuue+i)=43;

else if(*(chuue+i)==63) *(chuue+i)=47;

}

/*base64解码*/

void unbase64(unsigned char chuue[4],unsigned char chasc[3])

/*

chuue:未解码的base64代码

chasc:解码过的二进制代码

*/

{int i,k=2;

unsigned char t=null;

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

if((*(chuue+i)>=65)&&(*(chuue+i)<=90)) *(chuue+i)-=65;

else if((*(chuue+i)>=97)&&(*(chuue+i)<=122)) *(chuue+i)-=71;

else if((*(chuue+i)>=48)&&(*(chuue+i)<=57)) *(chuue+i)+=4;

else if(*(chuue+i)==43) *(chuue+i)=62;

else if(*(chuue+i)==47) *(chuue+i)=63;

else if(*(chuue+i)==61) *(chuue+i)=0;

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

{*(chhex+i)=*(chuue+i)<<k;

k+=2;

t=*(chuue+i+1)>>8-k;

*(chhex+i)|=t;

}

}

4. quoted-printable

quoted-printable简称qp, 一般用在email系统中。它

通常用于少量文本方式的8位字符的编码,例如foxmail就用

它做对主题和信体的编码。这种编码的应该是很好辨认的:

它有大量的"="。下面是它的一个例子:

mime-version: 1.0

content-transfer-encoding: quoted-printable

=a1=b6=c2=d2=c2=eb=cb=e3=b7=a8=b4=f3=c8=ab=a1=b7

=d7=f7=d5=df:mogao=a3=ac=b0=d7=d4=c6=bb=c6=ba=d7=d5=be=a3=a8telnet://202.11

2.20.132:23=a3=a9=b3=c9=d4=b1=a1=a3

=c4=aa=b8=df=c8=ed=bc=fe=b9=a4=d7=f7=ca=d2=a3=bahttp://mogao.bentiun.

net

emailto:mogao@371.net

*********************************************

* =b3=fd=c1=cb=bc=c7=d2=e4=ca=b2=c3=b4=b6=bc=b2=bb=b4=f8=d7=df=a3=ac=b3=

fd=c1=cb=d7=e3=bc=a3=ca=b2=c3=b4=b6=bc=b2=bb=c1=f4=cf=c2*

*********************************************

你可以把它单独存成一个文件,取名为:mogao.eml,

双击可以用outlook打开(前两行为邮件的原始信息,从第

四行开始为编码内容)。

qp的算法可以说是最简单的也可以说是编码效率最低的

(它的编码率是1:3),它是专门为了处理8位字符制定的。

它的算法是:读一个字符,如果ascii码大于127,即字符的

第8位是1的话,进行编码,否则忽略(有时也对7位字符编码)。

编码很简单,看下面的c语言描述即可:

/*qp编码*/

void qp(unsigned char sour,unsigned char first,unsigned char second)

/*

sour:要编码的字符

first:编码后的第一个字符

second:编码后的第二个字符

first和second为返回值

*/

{

if(sour>127)

{first=sour>>4;

second=sour&15;

if(first>9) first+=55;

else first+=48;

if(second>9) second+=55;

else second+=48;

printf("%c%c%c",=,first,second);

}

}

/*qp解码*/

void uqp(unsigned char sour,unsigned char first,unsigned char second)

/*

sour:解码后的字符

first:qp码的第一个字符

second:qp码的第二个字符

sour为返回值

*/

{

if(first>=65) first-=55;

else first-=48;

if(second>=65) second-=55;

else second-=48;

sour=null;

sour=first<<4;

sour|=second;

}

现在大家知道为什么qp的编码率那么低了吧!关于qp的

详细说明和准确定义可以参阅rfc2045。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » C#中对POP3邮件解码-.NET教程,C#语言
分享到: 更多 (0)

相关推荐

  • 暂无文章