JAVA电子邮件接收程序的设计与实现(4)
时间:2017-05-02 11:38 来源:毕业论文 作者:毕业论文 点击:次
SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器:二是从某一个服务器传输到另一个服务器。SMTP也是个请求/响应协议,命令和响应都是基于ASCⅡ文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码。SMTP使用TCP协议25号端口监听连续请求。 连接和发送过程如下:[12] (1)建立TCP 连接。 (2)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接收。 (3)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件。 (4)协商结束,发送邮件,用命令DATA发送。 (5)以“.”号表示结束输入内容一起发送出去,结束此次发送,用QUIT命令退出。 2 .2 JavaMail API简介 JavaMail API是一种可选的、能用于读取、编写和发送电子消息的包(标准扩展)。您可使用这种包创建邮件用户代理(Mail User Agent ,MUA) 类型的程序,它类似于Eudora、Pine及Microsoft Outlook这些邮件程序。其主要目的不是像发送邮件或其他邮件传输代理(Mail Transfer Agent,MTA)类型的程序那样用于传输、发送和转发消息[13]。换句话说,用户可以与MUA类型的程序交互,以阅读和撰写电子邮件。MUA依靠MTA处理实际的发送任务。 JavaMail API的设计是为收发信息提供与协议无关的访问。方式是把该API划分成两个部分: •API的第一个部分是是如何发送和接收独立于提供程序/协议的消息。 •API的第二个部分则使用特定的协议语言,如:SMTP、POP、IMAP以及NNTP等等。如果要让JavaMail API与服务器通信,就需要为之提供这些协议。 JavaMail API中提供了很多用于处理E-mail的类,其中比较常用的有Session(回话)类、Message(消息)类、Address(地址)类、Authenticator(认证方式)类、Transport(传输)类、Store(存储)类和Folder(文件夹)类等7个类。这7个类都可以在JavaMailAPI的核心包mail.jar中找到。 发送、接收邮件的整个流程图如图2.1所示: 图2.1 电子邮件工作流程图 2.3 JavaMail体系结构 要完成消息的交互,需要几方面的支持:邮件发送客户端程序、邮件接收客户端程序、邮件发送服务器和邮件接收服务器,此外,还需要相关的通信协议。 邮件发送客户端程序和邮件接收客户端程序可以是相同的,例如经常使用的微软的Outlook既可以发送邮件,也可以接收邮件。 邮件发送服务器和邮件接收服务器也可以是相同的服务器。在与邮件服务器交互的过程中,主要完成两个动作,把邮件发送到邮件服务器,以及从邮件服务器读取邮件。所以,主要使用两类协议,分别进行邮件的发送和接收。 邮件从发送方到接收方的传递过程(参见图2.2)如下:[14] (1)邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议。 (2)发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMTP。 (3)邮件接收方从接收方邮件服务器接收邮件,使用POP3协议或者IMAP协议。 图2.2 SMTP/POP3转发模型图 2.4 JavaMail核心成员 1.Session类 Session 类定义了一个基本邮件会话,是Java Mail API最高层入口类。所有其它类都是经由这个session 才得以生效。Session 对象用 Java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序享的其它信息。 2.Message类 当建立了Session对象后,Message类便可以被发送的构造信息体了。大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,MimeMessage 是个能理解 MIME 类型和头的电子邮件消息,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。[15] (责任编辑:qin) |