JavaMail---简介

我们经常会通过QQ邮箱或者网易邮箱等邮箱发送消息,今天就简单实现一下代码完成邮件的发送——JavaMail 的发送和接收文件

什么是JavaMail ?

JavaMail是由Sun公司定义的一套收发电子邮件的API,JavaMail API 提供一个独立于平台和协议独立的框架,以构建邮件和消息传递应用程序不同的厂商可以提供自己的实现类,厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议

常见的邮件协议

SMTP(发送邮件协议)

简单邮件传输协议(Simple Mail Transfer Protocol)由RFC 821定义。它定义了发送电子邮件的机制,对应的SSL(是为网络通信提供安全及数据完整性的一种安全协议)加密传输协议是SMTPS。在JavaMail API 环境中,基于 JavaMail 的程序将和你的公司或因特网服务供应商(Internet Service Provider)的SMTP服务器通信。

SMTP 服务器会中转消息给接收方 SMTP 服务器以便最终让用户经由 POP  IMAP 获得。这不是要求 SMTP 服务器成为开放的中继,尽管 SMTP 服务器支持身份验证,不过还是得确保它的配置正确。像配置服务器来中继消息或添加删除邮件账号这类任务的实现,JavaMail API 中并不支持;

POP3(收取邮件协议)

  • POP 代表邮局协议(Post Office Protocol)。目前用的是版本 3,也称 POP3RFC 1939 定义了这个协议,对应的SSL加密传输协议是POP3S。
  • POP 是一种机制,因特网上大多数人用它得到邮件。它规定每个用户一个邮箱的支持。这就是它所能做的,而这也造成了许多混淆。
  • 使用POP 时,用户熟悉的许多性能并不是由 POP 协议支持的,如查看有几封新邮件消息这一性能。这些性能内建于如 Eudora Microsoft Outlook 之类的程序中,它们能记住一些事,诸如最近一次收到的邮件,还能计算出有多少是新的。
  • 所以当使用JavaMail API 时,如果您想要这类信息,您就必须自己算;

IMAP(收取邮件协议)

  • 互联网消息协议,是POP3的替代协议,对应的SSL加密传输协议是IMAPS。IMAP 是更高级的用于接收消息的协议。
  • 在 RFC 2060 中被定义,IMAP 代表因特网消息访问协议(Internet Message Access Protocol),目前用的是版本 4,也称 IMAP4。在用到 IMAP 时,邮件服务器必需支持这个协议。不能仅仅把使用POP 的程序用于 IMAP,并指望它支持 IMAP 所有性能。
  • 假设邮件服务器支持 IMAP,基于 JavaMail 的程序可以利用这种情况——用户在服务器上有多个文件夹(folder),并且这些文件夹可以被多个用户共享。因为有这一更高级的性能,您也许会认为所有用户都会使用 IMAP。
  • 事实并不是这样。要求服务器接收新消息,在用户请求时发送到用户手中,还要在每个用户的多个文件夹中维护消息。这样虽然能将消息集中备份,但随着用户长期的邮件夹越来越大,到磁盘空间耗尽时,每个用户都会受到损失。使用 POP,就能卸载邮件服务器上保存的消息了。

MIME

  • MIME 代表多用途因特网邮件扩展标准(Multipurpose Internet Mail Extensions)。
  • 它不是邮件传输协议。但对传输内容的消息、附件及其它的内容定义了格式。这里有很多不同的有效文档:RFC 822RFC 2045RFC 2046  RFC 2047
  • 作为一个JavaMail API 的用户,您通常不必对这些格式操心。无论如何,一定存在这些格式而且程序会用到它。

NNTP

  • 因为 JavaMail API 将供应商和所有其它的东西分开了,你就能轻松添加额外的协议支持。
  • Sun 保留了一张第三方供应商列表,他们利用了 Sun 不提供超出(out-of-the-box)支持范围的协议。您会找到 NNTP(网络新闻传输协议)[新闻组]S/MIME(安全多用途因特网邮件扩展)及其它支持。

为什么要学习JavaMail ?

现在很多WEB应用在开发时都需要集成邮件发送功能,例如:

  • 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail。
  • 给过生日的用户自动发送一封表示祝贺的E-Mail。
  • 将网站的最新活动信息通过E-Mail发送给所有的注册会员。
  • 等等…

qq邮箱 的 IMAP/SMTP/POP3 地址

邮箱 的 IMAP/SMTP/POP3 协议默认是不开启的,你需要登陆到 邮箱,然后到“设置” > “账户” 将其开启。

服务器名称

服务器地址

SSL协议端口

非SSL协议端口

IMAP

imap.qq.com

993

143

SMTP

smtp.qq.com

465或者587

25

POP3

pop.qq.com

995

110

163邮箱的 IMAP/SMTP/POP3 地址

服务器名称

服务器地址

SSL协议端口

非SSL协议端口

IMAP

imap.163.com

993

143

SMTP

smtp.163.com

465或者994

25

POP3

pop.163.com

995

110

电子邮件的发送和接收过程

(下边的这个图,我就偷懒没画,然后从别的博主哪里找来的一张图,其实也不是我找的,是我同学学习发给我的,所以我也不知道原图地址,如果有知道出处的我可以加上链接)

 

简单说一下这个邮件收发过程:

  1. yerenyuan10001@163.com用户写好一封Email之后,发送到163的SMTP服务器。对应于上图的步骤①
  2. 163的SMTP服务器开始处理yerenyuan10001@163.com用户的请求,它会根据收件人的地址判断,当前收件人是不是自己管辖的用户,如果是,就直接将Email存放到为该收件人分配的邮箱空间当中。163的SMTP服务器判断收件人地址发现,这一封Email的收件人i_beautifulman@sina.com是sina的邮件服务器管理的,于是又将Email转发给sina的SMTP服务器。对应于上图的步骤②
  3. sina的SMTP服务器开始处理163的SMTP服务器发送过来的Email,sina的SMTP服务器根据收件人的地址判断,发现收件人是自己管辖的用户,于是就直接将Email存放到为i_beautifulman@sina.com用户分配的邮箱空间当中。对应于上图的步骤③
  4. yerenyuan10001@163.com用户将邮件发出去之后,就通知i_beautifulman@sina.com用户去收取。i_beautifulman@sina.com用户于是就连接上sina的POP3服务器收取邮件。对应于上图的步骤④
  5. POP3服务器从i_beautifulman@sina.com用户的邮箱空间当中取出Email。对应于步骤⑤
  6. POP3服务器将取出来的Email发给i_beautifulman@sina.com用户。对应于步骤⑥

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值