常用邮件协议及其命令行使用

    本文主要介绍邮件的发送接收协议,以及邮件的收发过程,并且通过命令行的形式登录SMTP服务器和POP3服务器,以便熟悉常用的命令,了解各个命令使用过程,这样为了更好的理解mail的开发过程有很大的帮助,以便更好的使用JavaMail中的API进行邮件系统的开发。

一、常用邮件协议介绍

SMTP协议(Simple Mail Tranfer Protocol)

  • 端口号:25, 定义邮件客户端(UA, User Agent)与SMTP服务器之间,以及两台SMTP服务器之间的通信规则。

POP3协议(Post Office Protocol)

  • 端口号:110 邮局协议,定义了客户端软件与POP3服务器的通信规则。

IMAP协议(Internet Message Access Protocol)

  • Internet消息访问协议,它是POP3协议的一种扩展,也是定义了邮件客户端软件与邮件服务器的通信规则。

常用邮件协议及其命令行使用_第1张图片

图1:本图来自《JavaMail开发详解》

二、SMTP、POP3命令详解

2.1 SMTP常用命令

    本小节中使用的6个命令时发送一个邮件最常使用的命令,在SMTP的RFC文档中定义了18个命令,具体的可以查看标准文档。

常用的6个命令
命令及格式               说明
ehlo ehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后必须发送的第一条命令参数domain是SMTP邮件发送者的主机名。
auth                                                                      当使用ehlo后,SMTP服务器会返回相应的命令其中含有认证的方式,通常有login、plain两种,我们使用auth login之后就可以直接输入用户名和密码即完成的登录(需要注意的是要使用base64编码后的用户名、密码才可以登录)
mail from:

此命令用于指定邮件发送者的邮箱地址,参数表示发件人的邮箱地址。

rcpt to: 此命令用于指定邮件接收者的邮箱地址,参数表示接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用多条RcptTo命令来分别指定每一个接收者的邮箱地址。
data 此命令用于表示SMTP邮件发送程序准备开始传送邮件内容,在这个命令后面发送的所有数据都将被当作邮件内容,直至遇到“.”(单独的一行)标识符,则表示邮件内容结束
quit 此命令表示要结束邮件发送过程,SMTP邮件接收程序接收到此命令后,将关闭与SMTP邮件发送程序的网络连接。

        在使用data之后就可以填写邮件的内容包括from、to、subject,则三项内容是可选的,但却是在实际的邮件中显示用到的,因此并不要求mail from中的内容和from中的内容相同,因此不能仅仅从from中的邮件内容就判定它一定是from所指定的邮件发过来的,它可能是使用mial from的用户将其from中的内容进行修改发送出去的结果,因此这里面就有可能出现邮件的真实性确认需要注意这方面的问题。

常用邮件协议及其命令行使用_第2张图片

常用邮件协议及其命令行使用_第3张图片
问题:在使用mail from和rcpt to命令发送一封邮件之后,在继续使用rcpt to命令是否可以再一次发送一封邮件呢?  
答:不行,必须按照这个顺序再一次输入命令,要是发送多个邮件可以使用多个rcpt to来指定。
2.2 POP3常用命令
使用POP3登录是用于查看服务器中自己的邮件可以读取邮件,删除邮件等操作,下面的列表中给出了常用的命令。POP3的RFC文档中共定义了12条命令。
POP3命令列表
命令格式                                            说明
user username                                                                                                                user命令是POP3客户端程序与POP3邮件服务器建立连接后通常发送的第一条命令,参数username表示收件人的帐户名称。
pass  password   pass命令是在user命令成功通过后,POP3客户端程序接着发送的命令,它用于传递帐户的密码,参数password表示帐户的密码。
stat stat命令用于查询邮箱中的统计信息,例如,邮箱中有邮件数和邮件占用的字节大小等。
uidl msg# uidl命令用于查询某封邮件的唯一标识符,参数msg#表示邮件的序号,是一个从1开始编号的数字。
list [msg#] list命令用于列出邮箱中的邮件信息,参数msg#是一个可选参数,表示邮件的序号。当不指定参数时,POP3服务器列出邮箱中所有的邮件信息;当指定参数msg#时,POP3服务器只返回该序号对应的邮件的信息。
retr msg# list命令用于获取某封邮件的内容,参数msg#表示邮件的序号。
dele msg# dele命令用于在某封邮件上设置删除标记,参数msg#表示邮件的序号。POP3服务器执行dele命令时,只是为邮件设置了删除标记,并没有真正把邮件删除掉,只有POP3客户端程序发出quit命令后,POP3服务器才会真正删除所有设置了删除标记的邮件。
reset rset命令用于清除所有邮件的删除标记。
top msg# top命令用于获取某封邮件的邮件头和邮件体中的前n行内容,参数msg#表示邮件的序号,参数n表示要返回邮件的前几行内容。使用这条命令以提高Web Mail系统(通过Web站点上收发邮件)中的邮件列表显示的处理效率,因为这种情况下不需要获取每封邮件的完整内容,而是仅仅需要获取每封邮件的邮件头信息。
noop noop命令用于检测POP3客户端与POP3服务器的连接情况。
apop name, digest apop命令用于替代user和pass命令,它以MD5数字摘要的形式向POP3邮件服务器提交帐户密码。
quit quit命令表示要结束邮件接收过程,POP3服务器接收到此命令后,将删除所有设置了删除标记的邮件,并关闭与POP3客户端程序的网络连接。
常用邮件协议及其命令行使用_第4张图片
常用邮件协议及其命令行使用_第5张图片
这里需要说明的是使用dele命令并不会立即删除邮件而是将邮件标记为删除,要使用reset命令才能从服务器中删除邮件。
常用邮件协议及其命令行使用_第6张图片
      需要知道SMTP、POP3命令对于邮件开发非常有用,因为JavaMail的API就是根据这些命令接口实现相应的API通过将接口同一抽象出来即为我们所使用的JavaMail的API。当然除此之外还是不够的还需要了解MIME的邮件结构这样才有助于邮件的内容分析以及相关的程序调试。

你可能感兴趣的:(JavaMail开发)