电子邮件的传输过程

电子邮件系统采用客户/服务器模式。电子邮件传送需要用到以下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实现收发邮件(一)的更多相关文章

  1. javaMail实现收发邮件(四)

    JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操作,在介绍这些类之前,我们先来了解下邮件接收API的体系结构,JavaMai API中定义了一个java.mail.Store类 ...

  2. javaMail实现收发邮件(三)

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  3. javaMail实现收发邮件(二)

    JavaMail API常用类 JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.intern ...

  4. javaMail实现收发邮件(五)

    控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类型的数据处理模块,我们只需要在把数据流传输给浏 ...

  5. java中javamail收发邮件实现方法

    概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...

  6. JavaMail实现带附件的收发邮件

    一.前言 参考博客: http://blog.csdn.net/xietansheng/article/details/51722660 http://www.cnblogs.com/HigginCu ...

  7. 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)

    Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...

  8. DouNet学习_收发邮件

    一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里  不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...

  9. Outlook Express 收发邮件出现"0x800CCC0F"错误代码解决方法

    非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...

随机推荐

  1. tree-lstm初探

    https://zhuanlan.zhihu.com/p/35252733 可以先看看上面知乎文章里面的例子 Socher 等人于2012和2013年分别提出了两种区分词或短语类型的模型,即SU-RN ...

  2. 学习笔记TF025:自编码器

    传统机器学习依赖良好的特征工程.深度学习解决有效特征难人工提取问题.无监督学习,不需要标注数据,学习数据内容组织形式,提取频繁出现特征,逐层抽象,从简单到复杂,从微观到宏观. 稀疏编码(Sparse ...

  3. [JLOI2011]不重复数字

    原题链接 题解 题目大意:给出N个数,要求把其中重复的去掉,只保留第一次出现的数.最后按顺序输出N <= 50000 然这题是个哈希的典型题目 HASH,我对于它的理解就是一个桶%一个数,当然并 ...

  4. Inotify机制的简单应用

    编程之路刚刚开始,错误难免,希望大家能够指出. 一.Inotify机制 1.简单介绍inotify:Inotify可用于检测单个文件,也可以检测整个目录.当检测的对象是一个目录的时候,目录本身和目录里 ...

  5. oracle-rman-3

    http://blog.csdn.net/leshami/article/details/6032525 rman概述及体系结构 http://blog.itpub.net/23513800/view ...

  6. day053 url反向解析图解 模板渲染

    一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用  {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...

  7. centos7忘记密码处理办法

    centos7忘记密码处理办法 此界面按e进入grub编辑界面 进入grub编辑界面.把linux16这行的ro修改为rw init=/sysroot/bin/sh. 按ctrl+x进入单用户模式 登 ...

  8. PLC 通讯

    几个之前整理的高级语言与PLC通讯的资源下载链接:三菱:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html倍福:http://bbs.elecf ...

  9. postgreSQL数据库limit分页、排序

    postgreSQL数据库limit分页.排序 语法: select * from persons limit  A  offset  B; 解释: A就是你需要多少行: B就是查询的起点位置. 示例 ...

  10. git tag 常用操作

    1.获取最新tag(获取不到就多获取几次) git fetch origin  或者 git fetch origin <tagname> 2. checkout tag到本地分支(如果看 ...