传智播客 JavaMail前奏之邮件协议分析详解

 

    JAVA邮件开发这套视频是张老师主讲的,和前期的Java Web一样,该课程的讲解方式由浅入深、循序渐进,先讲清楚理论知识和基本原理,然后再动手做实验。视频中的示例是真正能够使用的邮件生成和发送程序,不是HelloWorld级别的演示示例。为什么要学习邮件开发?正如张老师讲述的那样,邮件系统在十年前是很有市场的一个技术,虽然现在不如当初了,但是在现实企业开发中常常有需要用到一点邮件知识的,比如许多办公自动化项目中都要附带邮件发送的功能。开发一些简单的自用的邮件程序。所以,学习和了解邮件开发还是有必要的。
    学习邮件开发包括两大方面:一是发送和接收邮件,二是创建和解析邮件内容。首先是了解电子邮件的一些基本的常识。要在网上提供电子邮件功能,就必须有专门的邮件服务器,现在绝大多数的电子邮件服务器都为公众提供免费的电子邮件功能。总的来说,电子邮件服务器主要提供一下功能:
      1.接收用户投递的邮件;
      2.将用户投递进来的邮件转发给目标邮件服务器;
      3.接收其它邮件服务器转发过来的邮件并把邮件存储到其管理的用户邮件中;
      4.为用户提供读取自己账户中邮件的服务。
    互联网上的邮件发送和接受有两种主要形式,一是用户投递邮件到邮件服务器和邮件服务器投递到另外的邮件服务器,二是用户从邮件服务器去获取自己收到的邮件。前者是将邮件往邮件服务器送,后者是把邮件服务器中的邮件收回来。可以从对邮件的主动权来区分这两种不同的方式,所以相应的,两种方式采用的通讯协议是不同的。因此按照邮件服务器的通讯协议来划分种类就会有两种邮件服务器:一是SMTP服务器,另外一个是POP3/IMAP服务器。接下来的名词是电子邮箱和邮件客户端软件,这两个比较常基础,也容易理解。所谓电子邮箱,也称E-mail地址,实际上邮件服务器上的一个账号,申请账号的同时,邮件服务器也分配了一定的空间用来存储该账号的邮件。而邮件客户端软件主要用于帮助用户将邮件发送给SMTP服务器和从POP3/IMAP邮件服务器读取用户的邮件。有了这些基础知识,可以来了解一下邮件的传输的过程。假设sina的邮件服务器上有个账户是lisi,sohu的邮件服务器上有个账户是wangwu。lisi通过客户端(如outlook)发送邮件给wangwu。首先是在客户端写好邮件,然后发送到sina的邮件服务器,这里使用通讯协议是SMTP,而sina的SMTP服务器收到这封邮件后,发现是发给sohu的wangwu的,于是就将邮件发送给sohu的SMTP服务器,这时使用的协议也是SMTP。sohu的邮件服务器收到邮件后,将邮件存放到分配给wangwu的存储空间上。最后wangwu通过客户端软件连上sohu的POP3服务器去查询和收取邮件。在这一连串的过程中,总共有两次SMTP通讯,一次POP3通讯。下面是一个模拟实验,在计算机上装上易邮邮件服务器,然后建立两个账号,在本机上做实验:
      220 ESMTP 易邮邮件服务器 5.2.2004.02.18 SMTP Service Ready
      ehlo yxb
      250-AUTH=LOGIN
      250 AUTH LOGIN
      auth login
      334 VXNlcm5hbWU6
      eXhi
      334 UGFzc3dvcmQ6
      MTIzNDU2
      235 OK
      mail from: <yxb@yxb.com>
      250 OK
      rcpt to: <test@yxb.com>
      250 OK
      data
      354 send the mail data, end with .
      from: <yxb@yxb.com>
      subject: haha
 
      test!!!
      .
      250
      quit
      221 SMTP SERVICE CLOSED
    上面就是使用telnet连接25号端口和SMTP邮件服务器的通讯过程,其中以数字开头(状态码)是邮件服务器的应答。首先通过ehlo命令去和邮件服务器通讯,邮件服务器返回验证方式,然后接着发送自己的用户名和密码,需要注意的是用户名和密码是经过BASE64编码的,所以看上去毫无规律。然后就是mail from和rcpt to命令,它们分别是发送和接收电子邮件的账号。完毕以后就可以以data命令开始写邮件的内容了。可以没有from和subject等等。邮件正文用点(.)结束,然后就可以安全退出了。下面是收邮件的过程:
      +OK 易邮邮件服务器 5.2 POP3 Service Ready
      user test
      +OK welcome here
      pass 123456+OK
      stat
      +OK 1 189
      list
      +OK 1 189
      1 189
      .
      list 1
      +OK 1 189
      retr 1
      +OK 189 octets
      Return-Path: <yxb@yxb.com>
      Received: from yxb (unknown [127.0.0.1])
              by yxb.com with CMailServer 5.2 SMTP; Fri, 17 Aug 2009 18:13
      from: <yxb@yxb.com>
      subject: haha
 
      test!!!
 
      .
      dele 1
      +OK
      stat
      +OK 1 189
      rset
      +OK
      stat
      +OK 1 189
      quit
      +OK bye
    上面就是用telnet连接110号端口和POP3邮件服务器通讯的过程。同样也是要通过命令输入用户名和密码进行验证。然后就可以查看全部或者部分邮件信息。最重要的就是retr命令,表示收邮件,后面的数字表示第几封邮件。收到邮件内容除了平常看到的邮件正文,其实还有一些邮件经过的服务器的路由信息。对邮件的收发有了一定的概念后,编写相应的程序就会比较容易了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值