- 论坛徽章:
- 0
|
接收邮件部分
邮件接收部分采用的是标准的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 |
|