Email原理

E-mail与Internet

在专业的E-mail解决方案中,整个系统的各个组件通常都是来自同一家公司的软件,你不能随意更换个别组件,因为通常没有“等效程序”可以更换。另一方面,Internet Email系统采取开放式设计,任何人都是可以用不同的软件组合来架设一套邮件系统,并且能够与其他interner Email系统交换信息,唯一前提是所有软件都不惜遵守一组公开的标准与协议。这组协议制定了邮件的标准格式、邮件系统个角色的定位与任务以及邮件从发送方传递到接收方的详细过程。Exchange本身不是一个完整的Interner Email邮件系统,它只是整个系统中的一个重要组件。大多数Email用户只熟悉用来读信、写信的软件,称为“邮件用户代理”(Mail User Agent,MUA),常见的MUA包括:mutt、elm、pine、netscape与outlook express。其任务是让用户能够读信、写信、寄信。不过,MUA并非直接将Email送到收件人手中,而是由“邮件传输代理”(Mail Transfer Agent,MTA)代为传递。exchange扮演的角色正是MTA。

邮件系统的组成

当你寄信时,信件是交给邮局处理。同理,当你要求MUA送出一封邮件,它只能将该邮件交给一台运行MTA软件(例如exchange、postfix)的服务器。图1-1是Email从发信者到收信者所经过的处理流程。MTA的任务是接受MUA的委任,将Email从一个系统递送到另一个系统。并收下远方MTA送来的邮件。每当MTA收到MUA的寄信请求,它会先判断是否应该受理。通常,如果邮件是来自本地系统的用户,或是本地网络上的系统,或是任何特许可以通过它转发(relay)邮件到其他目的地的网络,MTA都会受理寄信请求。另一方面,MTA也会依据“收件人”来决定是否要收下邮件。如果收件人是本地系统的用户,或是收件人位于它知道要如何转递(forword)的其他系统,MTA就会收下信息。

MTA收到邮件之后,它必须决定下一步做什么。它有可能将邮件递送给自己系统上的用户,也有可能将邮件交给另一个MTA来继续传递。对于要交给其他网络的邮件,有可能会经过多个MTA接力传递。如果MTA无法递送信息,也无法转交给其他MTA处理,则退信给原发信者,或是发出通知函给系统管理员。一般,个人的MTA Server通常是由ISP控管;公司员工的,则可能由企业的信息系统部门控管。

邮件终点站的MTA,在发现收件人是本地系统的用户之后,必须将邮件交给“邮件投递代理”(message delivery agent,MDA)。MDA可能将信息存放在普通文件夹内,也可能存入专门存储电子邮件的特殊数据库。不管是哪一种形式,任何用来长期保存邮件的机制,我们一律统称为邮箱(message storage),或俗称为“信箱”。

邮件被存入邮箱后,它就待在那里,等待收件人将它收走。收件人使用MUA来取信、读信。提供邮箱访问服务的服务器软件,并非当初收下信息的MTA,两者的角色是分离的。MUA必须让用户成功通过身份验证,才可取走邮箱里的邮件,呈现给用户阅读。

由于Internet Email采用开放式标准,所以MTA、MDA、MUA等不同角色,可分别由许多不同的软件来扮演。实现相同协议的不同包,可以彼此互相交流,而不管他们是在什么系统上运行。如果将一个完整的Email邮件系统集中在一起,你可能会发现,处理SMTP的是一套软件,处理POP/IMAP的是另一套软件。但邮件系统中每一种角色,都有许多不同的软件可以选择。

时间: 2024-11-08 21:39:59

Email原理的相关文章

Email移动的原理

1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byUID(uid))  把邮件移动到指定的path; 4.选择移动后邮件所属folder,通过GetEmailCount()得到文件夹下邮件的个数,即最新移动过来邮件的索引值: 5.通过FetchEmailInfo(index,option),给出 邮件索引值和指定获取邮件属性,就可以得到移动后邮件的u

Spring高级话题[email protected]***注解的工作原理

出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法的支持. 这个相信大家都比较熟悉的.对于异步

iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解(转载自薛银亮 [email&#160;protected])

原文地址:http://www.cnblogs.com/66it/p/4784224.html iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解 什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出一个UIAlertView(显示具体内容) 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容) 更新app图标的数字(说明新

[email&#160;protected]实现原理

@wraps作用 python中的装饰器装饰过的函数其实就不是函数本身了,我们可以看看下面的例子 import time def timmer(func): """timmer doc""" def inner(*args, **kwargs): """inner doc""" start = time.time() res = func(*args, **kwargs) end = t

[email&#160;protected]的原理解析

作为一个菜鸟,我有一颗好奇的心,每当vue init 的时候,看到那流畅的进度和神奇的结果,心里都充满一窥其本质的期望…… 以下就是我不断的console,大致理出来的一个流程心得,纪录在此,以作备忘. 1.which vue,定位vue命令的实际位置 2.去往命令vue的目录,查看代码 这里的commander包是用来创建命令行的工具,其npm官网粗略了解,了解到其中的init.list命令会在当前目录寻找执行vue-init.vue-list文件 The commander will try

[email&#160;protected] 注解原理与使用

Java反射 java反射机制的定义: 在运行转态时(动态的)时. 对于任意一个类,都能够知道这个类的所有属性和方法 对于任意一个对象,都能够知道调用它的任意属性和方法 Class对象 java中用对象来对现实生活中的事物进行抽象,如人(现实生活)抽象到一个person类(java对象).但有没有想过,java中的类(现实生活)其实也是一个Class对象(对象).因此,这个Class类就包含了所有你定义的Class信息,包括所有的方法(私有,公有).构造器.实现了那些方法.哪些注解信息.所有的属

就是要你懂Java中volatile关键字实现原理

原文地址http://www.cnblogs.com/xrq730/p/7048693.html,转载请注明出处,谢谢 前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用. 本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解volatile的原理,从而更好.更正确地地

Rsync无差异同步原理和实现

4.Rsync无差异同步原理和实现.md 无差异同步   在生产环境中我们可能会遇到这样的状况,我们的客户端在服务端去拉取数据的时候,首先一点,对于拉取我们的服务端有的那么我们客户端肯定有.但是我们的客户端有的服务端就不一定是有的了.反之如果是推送的话,那么我们客户端有的我们的服务端那肯定是有的,但是我们的服务端有的我们的客户端不一定有.所以对于这种当服务端删除一条数据之后为了保障我们的客户端也能在下一次同步的时候进行删除的这种情况我们就需要采取无差异同步,保障数据的一致性. 实现方法 --de

一起来造一个RxJava,揭秘RxJava的实现原理

RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾里的.既然用拆轮子的方式来分析源码比较难啃,不如换种方式,以造轮子的方式,将源码中与性能.兼容性.扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理. 什么是响应式编程 首先,我们需要明确,RxJava是Reactive Programming在Java中的一种实现.什么是响应式编程