一、对附件进行编码与解码的代码/* 
base64 en/decoder  - Ver 1.01 - 
Programmed by hsj  : 99.07.29 
                    : 99.07.30 debug :) 
*/ 
#include <stdio.h> 
#include <stdlib.h> int base64enc(char *,char *); 
int base64dec(char *,char *); 
void usage(char *); void main(int argc,char *argv[]) 

    int ret;     if(argc<4) 
        usage(argv[0]); 
    if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0)) 
        usage(argv[0]); 
    switch(argv[1][1]) 
    { 
        case 'e': 
            ret = base64enc(argv[2],argv[3]); 
            break; 
        case 'd': 
            ret = base64dec(argv[2],argv[3]); 
            break; 
    } 
    if(ret==0) 
        printf("Done..."); 
    else 
        printf("Error. code[%d]\n",ret); 
} int base64enc(char *infile,char *outfile) 

    int i,len,llen = 0,pad = 0; 
    unsigned char buf[4],buf2[4],lf = '\n'; 
    FILE *fpi,*fpo;     if((fpi=fopen(infile,"rb"))==0) 
        return(-1); 
    if((fpo=fopen(outfile,"wb"))==0) 
    { 
        fclose(fpi); 
        return(-2); 
    } 
    for(;;) 
    { 
        if((len=fread((char *)buf,1,3,fpi))==0) 
            break; 
        if(len<3) 
        { 
            pad = 3 - len; 
            for(i=len;i<3;i++) 
                buf[i] = 0; 
        } 
        buf2[0] = buf[0] >> 2; 
        buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4; 
        buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6; 
        buf2[3] = buf[2] & 0x3f; 
        for(i=0;i<4;i++) 
        { 
            if(buf2[i]>=0 && buf2[i]<=25) 
                buf2[i] = buf2[i] + 'A'; 
            else if(buf2[i]>=26 && buf2[i]<=51) 
                buf2[i] = buf2[i] - 26 + 'a'; 
            else if(buf2[i]>=52 && buf2[i]<=61) 
                buf2[i] = buf2[i] - 52 + '0'; 
            else if(buf2[i]==62) 
                buf2[i] = '+'; 
            else if(buf2[i]==63) 
                buf2[i] = '/'; 
        } 
        if(pad) 
        { 
            fwrite(buf2,4-pad,1,fpo); 
            for(i=0;i<pad;i++) 
                buf2[i] = '='; 
            fwrite(buf2,pad,1,fpo); 
        } 
        else 
            fwrite(buf2,4,1,fpo); 
        llen += 4; 
        if(llen==76) 
        { 
            fwrite(&lf,1,1,fpo); 
            llen = 0; 
        } 
    } 
    fwrite(&lf,1,1,fpo); 
    fclose(fpi); 
    fclose(fpo); 
    return(0); 
} int base64dec(char *infile,char *outfile) 

    int i,pad = 0; 
    unsigned char buf[4],buf2[4]; 
    FILE *fpi,*fpo;     if((fpi=fopen(infile,"rb"))==0) 
        return(-1); 
    if((fpo=fopen(outfile,"wb"))==0) 
    { 
        fclose(fpi); 
        return(-2); 
    } 
    for(;;) 
    { 
        i = 0; 
        while(i<4) 
        { 
            if(fread(&buf[i],1,1,fpi)==0) 
                break; 
            if((buf[i]!='\r')&&(buf[i]!='\n')) 
                i++; 
        } 
        if(i==0) 
            break; 
        if(i!=4) 
        { 
            fclose(fpi); 
            fclose(fpo); 
            remove(outfile); 
            return(-3); 
        } 
        for(i=0;i<4;i++) 
        { 
            if(buf[i]>='A' && buf[i]<='Z') 
                buf[i] = buf[i] - 'A'; 
            else if(buf[i]>='a' && buf[i]<='z') 
                buf[i] = buf[i] - 'a' + 26; 
            else if(buf[i]>='0' && buf[i]<='9') 
                buf[i] = buf[i] - '0' + 52; 
            else if(buf[i]=='+') 
                buf[i] = 62; 
            else if(buf[i]=='/') 
                buf[i] = 63; 
            else if(buf[i]=='=') 
            { 
                pad = 4 - i; 
                for(;i<4;i++) 
                    buf[i] = 0; 
                break; 
            } 
            else 
            { 
                fclose(fpi); 
                fclose(fpo); 
                remove(outfile); 
                return(-4); 
            } 
        } 
        buf2[0] = buf[0] << 2 | buf[1] >> 4; 
        buf2[1] = buf[1] << 4 | buf[2] >> 2; 
        buf2[2] = buf[2] << 6 | buf[3]; 
        fwrite(buf2,3-pad,1,fpo); 
    } 
    fclose(fpi); 
    fclose(fpo); 
    return(0); 
} void usage(char *name) 

    printf("usage : $ %s [-e:d] target-file out-file\n",name); 
    printf("   -e : execute base64 encode.\n"); 
    printf("   -d : execute base64 decode.\n"); 
    exit(0); 

二、一些资料http://www.vchelp.net/source/submit/email_coder.zip
附作者的说明:
/*
之前因为工作原因需要邮件的各种编码,于是乎开始了代码大搜索希望能够找到可用的好用的代码终于在你这个站点发现了 UUEn/Decode MIME Base64 Decode (内心狂喜)当下来后非常失望:( --代码杂乱,非常的不清晰,不是以功能类或函数提供别说使用就是做算法演示也太说不过去了 :( 于是乎只能查相关资料自己写了 :( 自认为我各个编码都要强于目前站点上的例子所以斗胆发给你请求发布,以替换目前网上的那个代码例子,以帮助类似于我的后来人 :) 代码名称/用途 MailCoder.zip 提供关于E-Mail信体的基本编码和解码方法包括 Base64, UUCode, Quoted-Printble 作者邮件地址 [email protected] 代码设计思想 编解码速度快 全兼容Outlook Express 部分关键代码说明 全部类静态方法 毋需创建实例即可使用 使用说明 首先使用CMailCoder提供的获取编码或解码长度的方法取得长度,然后根据取得的长度分配空间然后调用相应的编码解码函数进行操作就行了很简单的一看就懂 :) 
*/