Chinaunix

标题: 收EMAIL [打印本页]

作者: yufan_lu    时间: 2007-11-27 12:26
标题: 收EMAIL

接收邮件部分


邮件接收部分采用的是标准的POP(Post Office Protocol)协议,用的是110端口,现在最新版本是pop3, pop3常用的命令根据连接时的不同状态,有:
1:授权状态:
     Use        用户名
     Pass        用户密码
     Quit        退出

2:执行状态
STAT        信箱状态
LIST         显示编号为msg的信件的长度
RETR         取编号为msg的信件

过程为:
1:    得到服务器地址
2:   连接服务器
3:   从服务器取得连接成功的信息
4:   先发三个命令,分别是 USER  PASS STAT  从STAT命令返回信息中取得邮件数目。
5:    对每一个命令都根据其返回结果来确定是否做下一步的操作
6:    对LIST RETR命令分开处理,因为对于LIST RETR 命令,返回的信息由很多行组成.
7:    最后发送QUIT退出

函数说明:
1;int judgeReply(char *buf,int n)
判断邮件服务器应答内容,保证整个pop3工作流程的正确.
  
在发送邮件部分有二个文件,一个收邮件的文件,另一个就是处理附件的文件,其中接收邮件部分是,我们从邮件服务器中下载一封邮件,并以文件的形式保存起来,保存起来后,我们就可以利用另一个程序,来处理这个mail文件,取得附件内容,附件肉容是经过base64编码过的,所以这里有个base64解码的过程。

解码原理:将4个字节转换成3个字节.
            先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.这样就还原了.
在mail 文件中提出来附件的方法是,找到与字符串“Content-Disposition: attachment;
filename“匹配的,从这个地方下面就是附件了,当然还要把文件名给取出来,

主要函数:
void jmail_mail(char *ff)   
  ff为mail文件名
void base_mail()
  解码函数,不过在这里解码过程中,读进去的字节数一定要是4的倍数,

int Base64Dec(unsigned char *buf,const unsigned char*text,int size)
解码函数。 Buf是解完后的,
           Text 是解之前的
           Size 是大小

实现的功能:任意接收任何格式的附件内容,并完整的解码成功。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/43045/showart_431438.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2