前言
之前做了邮件的接收和解析的项目,接触到了邮件协议,在此根据网上的一些资料整理总结一下.本文有稍微有一点点长,各位请耐心.
目录
- 三大邮件协议简介
- POP协议详解
- 实例
一.三大邮件协议简介
说到邮件接收,首先需要知道常用的邮件协议,常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍。详细资料网上有很多,有兴趣的可以查查.
1.1 SMTP协议
SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
SMTP已是事实上的E-Mail传输的标准。
1.2 POP3协议
POP邮局协议负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务之一:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。POP协议支持多用户互联网邮件扩展,后者允许用户在电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,包括图片和声音文件等。在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,不在服务器上保留。
POP3(Post Office Protocol 3)即邮局协议的第3个版本,是因特网电子邮件的第一个离线协议标准。
1.3 IMAP4协议
互联网信息访问协议(IMAP)是一种优于POP的新协议。和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但IMAP克服了POP的一些缺点。例如,它可以决定客户机请求邮件服务器提交所收到邮件的方式,请求邮件服务器只下载所选中的邮件而不是全部邮件。客户机可先阅读邮件信息的标题和发送者的名字再决定是否下载这个邮件。通过用户的客户机电子邮件程序,IMAP可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。
支持种IMAP的常用邮件客户端有:ThunderMail,Foxmail,Microsoft Outlook等。
二.POP协议详解
邮件收发的流程原理,可以参考邮件发送和接收原理,可以帮助你迅速理解,建议跟着做一遍,
然后对于邮件内容的解析可以参考邮件格式分析,帮助你分析邮件数据.
POP3指令
命令 | 参数 | 使用在何种状态中 | 描述 |
---|---|---|---|
USER | Username | 认证 | 此命令与下面的pass命令若成功,将导致状态转换 |
PASS | Password | 认证 | 此命令若成功,状态转化为处理 |
APOP | Name,Digest | 认证 | Digest是MD5消息摘要 |
STAT | None | 处理 | 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 |
UIDL | [Msg#](邮件号,下同) | 处理 | 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的 |
LIST | [Msg#] | 处理 | 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的 |
RETR | [Msg#] | 处理 | 返回由参数标识的邮件的全部文本 |
DELE | [Msg#] | 处理 | 服务器将由参数标识的邮件标记为删除,由QUIT命令执行 |
TOP | [Msg#] | 处理 | 服务器将返回由参数标识的邮件的邮件头+前n行内容,n必须是正整数 |
NOOP | None | 处理 | 服务器返回一个肯定的响应,用于测试连接是否成功 |
QUIT | None | 处理/认证 | 1) 如果服务器处于“处理”状态,么将进入“更新”状态以删除任何标记为删除的邮件,并重返“认证”状态。2) 如果服务器处于“认证”状态,则结束会话,退出连接 |
补充
- windows下使用telnet向邮件服务器发送数据是以单字节发送.
- 在代码中向邮件服务器发送命令时,需要在命令后加上"\r\n".
- 各种协议大同小异,根据不同的指令获取自己想要的数据,接着就是解析数据里的内容.
- 原始的邮件数据可以在foxmail的“更多操作”->"查看邮件源码"中看到
三.实例
根据第二步可以轻松构建获取邮件的原始数据,接下来就是解析邮件内容,需要注意邮件的编码方式.
略。哈哈哈。稍微分析一下接收到的邮件信息格式进行拆分获取就可以了。