javaMail实现收发邮件(一)
电子邮件的传输过程
电子邮件系统采用客户/服务器模式。电子邮件传送需要用到以下3个重要模块:MUA(Mail User Agent,邮件用户代理):用户通过它与电子邮件服务器打交道。MUA实际上就是邮件客户端软件。MTA(Mail Transfer Agent,邮件传输代理):它主要负责处理所有接收和发送的邮件,为MUA或者MTA提供邮件发送服务,接收其他MTA发送过来的邮件。
MDA(Mail Delivery Agent,邮件投递代理):它负责邮件本地投递。当MTA决定某邮件发送本地用户时,MTA将邮件交给MDA程序进行分发,也就是说投递到用户的。
具体的传递过程如下:
1、发件人利用MUA将邮件发送给MTA。
2、MTA收到邮件后判断收件人是不是本地账户,如果是本地账户,交由MDA投送到该账户的邮箱中,完成发送过程,跳到第5步。如果不是则执行下一步骤。
3、MTA根据其邮件中继转发设置来决定如何转发邮件。
4、最终目的的MTA将受到的交给他的MDA处理,有MDA将邮件投递到收件人的邮箱中。
5、收件人利用MUA通过POP/IMAP协议连接到邮箱所在的服务器,请求查看自己的收件箱是否有邮件,如果有邮件,将会通过它传送个收件人的MUA。
邮件传输协议
电子邮件服务传输主要是用到以下3中网络协议
SMTP(简单邮件传输协议)
SMTP是Simple Mail Transfer Protocol。标准TCP端口是25。MUA将邮件发送到MTA,MTA将邮件发送给下一个MTA,都是要使用SMTP。SMTP的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。
SMTP是一个“单向”的协议,它不能用户从其他邮件服务器收取邮件。它本身是采用客户/服务器模式,负责发送邮件的SMTP进程就是SMTP客户端,负责接收邮件的SMTP进程就是SMTP服务器。一个完整的SMTP通信过程主要包括建立连接、传送邮件、释放连接三个过程。
建立连接:首先由发件人将要发送的邮件发送到邮件缓存,SMTP客户端定期扫描邮件缓存,一旦发现有邮件,就与SMTP服务器建立TCP连接,然后发送HRLLO命令以附上发送方的主机名。
传送邮件:SMTP客户端使用MAIL命令开始传送邮件,该命令提供发件人的地址;然后执行RCPT命令,并提供收件人地址;最后执行DATA命令传送邮件内容。
释放连接:邮件传送完毕后,SMTP客户端发送OUT命令请求关闭TCP连接。
POP(邮局协议)
POP是Post Office Protocol。标准TCP端口为110。主要用于电子邮件的接收。MUA经由POP协议连接到MTA的用户收件箱,以读取或下载用户在收件箱中邮件。
目前用的较多的POP协议是POP3。POP3使用 TCP 作为传输协议。
IMAP(Internet信息访问协议)
IMAP是Internet Message Access Protocol。标准TCP端口为143,它也是让MUA从MTA收取邮件。目标球IMAP协议的版本为IMAP4。
POP和IMAP两者都可以用于收取邮件,都是采用客户/服务器模式,两者最主要的区别就在于他们检索邮件的方式不同。使用POP时,邮件驻留在服务器中个,一旦接收邮件,邮件都从服务器上下载到用户计算机上。而IMAP则能够然该用户了解到服务器上存储邮件的情况,已下载的邮件仍然滞留在服务器中,以便于实现邮件归档和共享。
JavaMail API
在某网站注册了一个账户之后,该网站就会自动发送一封欢迎邮件并让我们确认是否注册,以防止恶意注册
JavaMail API是Sun公司为方便Java开发人员在应用程序中实线邮件发送和接收功能而通过的一套标准开发包,它支持一些常用的邮件协议,如SMTP、POP3、IMAP和MIME等。
JavaMail API按其功能划分通常可分为如下三大类:
1、创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件;
2、发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议;
3、接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
Session类:
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

javaMail实现收发邮件(一)的更多相关文章
- javaMail实现收发邮件(四)
JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操作,在介绍这些类之前,我们先来了解下邮件接收API的体系结构,JavaMai API中定义了一个java.mail.Store类 ...
- javaMail实现收发邮件(三)
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- javaMail实现收发邮件(二)
JavaMail API常用类 JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.intern ...
- javaMail实现收发邮件(五)
控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类型的数据处理模块,我们只需要在把数据流传输给浏 ...
- java中javamail收发邮件实现方法
概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...
- JavaMail实现带附件的收发邮件
一.前言 参考博客: http://blog.csdn.net/xietansheng/article/details/51722660 http://www.cnblogs.com/HigginCu ...
- 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...
- DouNet学习_收发邮件
一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里 不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...
- Outlook Express 收发邮件出现"0x800CCC0F"错误代码解决方法
非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...
随机推荐
- c++ 网络库
1.libevent 2.boost::asio 3.ace boost::asio以前看过,不过忘记了 学习,学习
- Java基础之枚举类型
枚举 为什么需要枚举 在Java开发过程中,有时需要定义一系列有限的数据,如:月份.星期等.<br> java1.5之前,主要通过定义一系列静态常量完成. class Genders{ p ...
- PythonStudy——变量 Variable
变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问.在指令式语言中,变量通常是可变的:但在纯函数式语言(如Haskell)中,变量可能是不可变(immutab ...
- MySQL Execution Plan--IN查询计划
对于IN查询,MySQL会根据当前表数据结构(索引)和数据分布(统计信息和预估)生成多种执行计划,并根据执行成本挑选出“最优执行计划”. 假设有查询 SELECT * FROM student ,,, ...
- IntelliJ IDEA 新版发布:支持CPU火焰图,新增酷炫主题
JetBrain 是一家伟大的公司,一直致力于为开发者开发世界上最好用的集成开发环境 就在上周,JetBrain 公司发布了 Java 集成开发环境 IntelliJ IDEA 最新版本 2018.3 ...
- Android studio 启动模拟器出现 VT-x is disabled in BIOS 以及 /dev/kvm is not found
Android studio 启动模拟器出现 VT-x is disabled in BIOS 以及 /dev/kvm is not found 网上大部分文章都是说在bios开启vt-x支持等.这里 ...
- 【C++】boost::shared_ptr boost::make_shared
一.shared_ptr shared_ptr作为一个动态分配的对象,当最后一个指向其内容的指针销毁(destroyed)或重置(reset),其指向的内容会被销毁(deleted).不再需要显式调用 ...
- 【剑指offer】合并有序链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *思路:假设两个链表的当前结点为n1(list1),n2(list2)比较链表结点值的大小,如果n1.va ...
- CLOSE_WAIT状态的原因与解决方法
https://blog.csdn.net/Windgs_YF/article/details/83513696 netstat -nat|awk '{print $6}'|sort|uniq -c| ...
- 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息
安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [grid@node1 grid]$ ./runcluvfy.sh stage - ...