热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

电子邮件系统基础讲解

电子邮件系统是目前Internet上通用的标准,由于具有完善的设计架构,因此可兼容来自不同平台、服务器或应用程序间的信息交换。因此在讨论邮件服务器的架设与管理前,我们必须对其基本概念有充分的了解,因此本节先行介绍有关电子邮件系统的专有名词、电子邮

电子邮件系统是目前Internet上通用的标准,由于具有完善的设计架构,因此可兼容来自不同平台、服务器或应用程序间的信息交换。因此在讨论邮件服务器的架设与管理前,我们必须对其基本概念有充分的了解,因此本节先行介绍有关电子邮件系统的专有名词、电子邮件传递流程与Sendmail安装等主题。
6.1.1   专有名词
本节将从与电子邮件系统有关的名词开始介绍,之后再讨论整个电子邮件传递的流程,希望能帮助读者建立清楚和正确的概念。
电子邮件
电子邮件(Electronic Mail,E-mail)是通过网络连接来相互传递的信息,也是目前Internet中最常用的服务之一,它的主要优点有:
ナ快速:电子邮件寄出后,收件人能在短时间内得到这份邮件。
ナ经济:它不需要使用信封和信纸,也不需邮资。
ナ多样性:除了文本之外,电子邮件还可传送图片、声音、影像和其他类型的数据。
基本上E-mail包含两个部分:邮件信封与邮件内容。邮件信封是指保留给邮件服务器的信息,它并不提供用户浏览之用,其中包括Received、Message ID、From、Subject、Date等。
而邮件内容又包含报头与邮件体两个部分,如果有附件也会出现于此。
邮件传输代理
邮件传输代理(Mail Transfer Agent,MTA)是一种在服务器端执行的软件,也就是邮件服务器,它可在服务器间传送电子邮件。一般而言,每个系统只有一个MTA保持在运行状态,而在UNIX系统中使用最为广泛的MTA程序有Sendmail、Postfix、Qmail与Fetchmail等,本章将以Sendmail的内容介绍为主。
邮件用户代理
邮件用户代理(Mail User Agent,MUA)是一种客户端软件,它可提供用户读信、回信、写信及处理邮件等功能,但和MTA不同的是,一个系统中可以同时存在多个MUA程序。一般常见的MUA程序包括Linux平台上的mail、mailx、elm和mh等,以及Windows操作系统中的Outlook Express或Netscape Messenger。
邮件传递代理
邮件传递代理(Mail Delivery Agent,MDA)通常与MTA一同运行,将MTA接收的邮件,按照目的位置做出判断,以决定将该邮件放在本机账户下的邮箱,或是再经过MTA将此邮件转发到下个MTA,而MDA一般都在后台执行。
如果此封邮件的目的地为本机用户邮箱,则MDA除了将邮件放在正确的邮箱外,同时还具有邮件过滤的功能,例如丢弃某些特定主题的广告或色情邮件,或者自动回复发件人等。
邮件传递系统
由MTA和MUA组合而成的系统称为邮件传递系统(Mail Transfer System,MTS),如-1所示。例如目前Internet就是一个大型的MTS。

-1   简单的邮件传递系统
邮局协议
邮局协议(Post Office Protocol,POP)是MTS上负责“接收”电子邮件的通信协议,也就是说,POP不具有传送邮件到用户或其他邮件主机的功能。
在提供此项服务的主机中,当邮件发送时会先保存在服务器上,然后在POP客户端连接到服务器时,POP服务器会将用户邮箱中的邮件下载到客户端计算机,并由服务器上删除这些信件。
所以用户可以在不连接服务器的情形下进行脱机阅读,因此特别适用于拨号连接的用户,这也是POP主要的优点。
但如果用户邮箱中存在大量的邮件,在下载时可能会引起网络流量的增加,特别是在带宽不足的情形下更为严重,所以在使用POP服务器前,需先考虑目前企业的现况以及用户的需求。
注意:所谓脱机阅读是指用户在登录邮件服务器后,将属于他的邮件利用下载的方式保存在本机硬盘中,然后即可中断连接,待空闲时再进行阅读。
因为POP是采用“拉”邮件的方式,所以当使用支持POP的MUA读取电子邮件时,就可执行用户命令或是固定时间间隔的方式,将MTA上的新邮件“拉”到客户端的计算机上并加以保存。这种脱机读信的工作,很显然都是由MUA主动完成而非MTA,所以客户端拥有主动权,可以弹性决定取信的时间。
两种POP最普遍的版本是:POP2以及POP3,但两者之间彼此不兼容,POP2在连接端口109执行,而POP3则在连接端口110执行。在Fedora Core 5中同时支持二者,目前POP3的使用率较高,可由/etc/services文件中查看以下的内容:
pop2 109/tcp  pop-2  postoffice # POP version 2
pop2 109/udp  pop-2 
pop3 110/tcp  pop-3    # POP version 3
pop3 110/udp  pop-3
Internet信息访问协议
Internet信息访问协议(Internet Message Access Protocol,IMAP)是Internet上一项常见的通信协议,它符合RFC的标准,其中包含连接方式、客户端验证以及Client/Server的会话等定义,因此可支持所有兼容RFC 2060的IMAP客户端。
与POP一样,IMAP主要用来读取服务器上的电子邮件(并非是传递),但客户端需先登录服务器,然后才可进行资源的访问。用户在登录后可根据授予的权限来读取或修改信件内容,并不是将服务器中的邮件直接下载到客户端计算机(与POP最大的不同),这样可避免重要数据在下载过程中遗失。
由于IMAP没有将邮件实际下载到客户端,因此用户必须确定和服务器间存在网络连接才可读取信件内容,所以通常在局域网中才使用IMAP来进行信件的接收。
IMAP是一个逐渐崭露头角的邮件通信协议,因为它比POP更具弹性,两者在访问邮件方式上的差别如-2所示。但目前仍然有较多人使用POP作为电子邮件接收的通信协议。IMAP支持的操作模式有:
-2   POP与IMAP访问邮件的方式
?脱机模式(Offline)
MUA会先将电子邮件从服务器下载到客户端计算机,之后删除主机上的信件。
?在线模式(Online)
MUA在远程执行服务器上的邮件处理,例如删除和修改,并把这些邮件保留在服务器上。只要一接收新邮件,客户端可以立即得到最新的E-mail邮箱情况。
?中断连接模式(Disconnected)
MUA先连接到服务器选择所要处理的邮件,然后复制一份缓存到计算机中,接着就中断连接。稍后如果再次恢复连接时,客户端可将缓存邮件与服务器执行同步化。
目前在Fedora Core 5中支持IMAP第二版的IMAP2与IMAP3(当前最新版为IMAP4),可由/etc/services文件中查看以下的内容:
imap 143/tcp  imap2  #Interim Mail Access Proto v2
imap 143/udp  imap2
imap3 220/tcp    # Interactive Mail Access
imap3 220/udp    # Protocol v3
imaps 993/tcp    # IMAP over SSL
imaps 993/udp    # IMAP over SSL
表6-1中是有关POP与IMAP两种通信协议的比较。
表6-1   两种通信协议的比较
通 信 协 议 优    点 缺    点
POP ?适合脱机阅读可节省拨号连接费用 ?设置较为繁琐
?不需保持网络的持续连接 ?信件下载到客户端计算机上保密性差
IMAP ?不用设置服务器等相关信息 ?服务器的负担较重
?可通过浏览器收发E-mall ?需要限制用户邮箱容量
?信件保存于服务器上保密性高 ?需要连接才能访问邮件
简单邮件通信协议
简单邮件通信协议(Simple Mail Transfer Protocol,SMTP)是一种在Internet中“传递”电子邮件的通信协议,它和POP与IMAP一样都是用来控制信息或邮件的传输与接收。最重要的一点是,SMTP只负责电子邮件的传递,而POP与IMAP则是负责接收信件。
它取代了传统RPC(Remote Procedure Call)和X.400的传输机制,而且可以在Internet上和不同的邮件系统交换信息。许多管理员习惯将SMTP与POP或IMAP服务建立在同一台机器内,但也可利用不同的主机来处理SMTP与POP或IMAP邮件。
当MUA或MTA要将E-mail传送出去时,就是使用SMTP来彼此通信,才能使E-mail在Internet上流通并送达目的地。而SMTP是一种“推”方式的E-mail通信协议,它会将不属于本身网络的E-mail传送到远程网络,让此信息离目的地主机越来越近,如-3所示。
-3   电子邮件的传送与接收
注意:目前有一种叫“ESMTP”的标准,它是“Extended SMTP”的缩写,属于SMTP的扩展格式,许多邮件服务器也支持这一通信协议。
6.1.2   电子邮件传递流程
在了解有关电子邮件系统的重要名词后,本小节我们将探讨电子邮件的传递流程。因为传递的方式不同,所以我们将内容分为两个部分来讨论:本地与远程网络邮件传递。
本地网络邮件传递
如果电子邮件的发件人和收件人邮箱都位于同一台邮件服务器中,它会利用以下的方式进行邮件传递,如-4所示。
1) MUA先利用TCP连接端口25,将电子邮件传送到邮件服务器(MTA),此时发件人必须正确定义本身与收件人的电子邮件地址,然后这些邮件会先保存在队列中。
2) 经过服务器的判断,如果收件人属于本地网络的用户,则此邮件就会交由MDA进行处理,之后直接传送到收件人邮箱。
3) 收件人利用POP或IMAP软件(MUA),连接到邮件服务器下载或直接读取电子邮件,整个邮件传递过程也随之完成。
-4   本地网络邮件传递流程
注意:如果网络中断或拥塞,信件会一直暂存在系统的队列(/var /spool/mqueue目录),等一段时间后再尝试传送。
由于发件人与收件人位于同一网络中,而且双方的电子邮件邮箱也都在同一台邮件服务器上,因此不一定需要通过主机名称或域名来查找收件人,惟一需要的是用户的账号名称,因为在同一台服务器上不会存在两个相同的账号名称。
例如同一网络中的用户要寄一封电子邮件给另一用户caroline,则可以使用的收件人地址类型有:

?caroline@mail.fc5linux.com
?caroline@mail
?caroline@localhost
?caroline@
?caroline
上述的第一种电子邮件地址类型是最完整的表示法,caroline表示用户账号名称,mail表示邮件服务器的别名,而fc5linux.com则是已向InterNIC注册的域名。
远程网络邮件传递
如果电子邮件的发件人和收件人位于不同的网络中,例如台湾和美国,它的邮件传递较为复杂,远程网络邮件传递流程如-5所示。一般的步骤如下:
1) MUA先利用TCP连接端口25,将电子邮件传送到MTA,此时发件人必须正确定义本身与收件人的电子邮件地址,然后这些邮件会先保存在队列中。
2) 经过服务器的判断,如果收件人属于远程网络的用户,则此服务器会先向DNS服务器要求解析远程邮件服务器的IP地址。
3) 如果名称解析失败,则无法进行邮件的传递。如果成功解析远程邮件服务器的IP地址,则本地的邮件服务器将利用SMTP将邮件传送到远程(这就是邮件转发功能)。
4) SMTP将尝试和远程的邮件服务器连接,如果远程服务器目前无法接受邮件,则这些信件会继续停留在队列中,然后在指定的重试间隔再次尝试连接,直到成功或放弃传送为止。
5) 如果传送成功,则远程MTA就会将此邮件交由MDA进行处理,并放入用户邮箱。之后收件人即可利用POP或IMAP软件,连接到邮件服务器下载或读取电子邮件,而整个邮件传递过程也随之完成。
-5   远程网络邮件传递流程
综合以上两种不同形式的电子邮件传递方式,笔者在此以一流程图来归纳所有的邮件传递过程,希望读者能得到最清楚的概念。-6是完整的电子邮件传递流程。
-6   完整的电子邮件传递过程
6.1.3   Sendmail安装
在Linux平台中最为有名的邮件服务器应该非Sendmail莫属了,它原来是由一位柏克利大学学生?Eric Allman所开发,但由于采用Open Source的公开发行方式,因此目前版本的功能也大为提升。由于Sendmail可提供多样及稳定的特色,所以它是Linux操作系统中最常被采用的MTA软件,目前由Sendmail协会负责维护。有关sendmail的详细信息,可参考以下的网站内容:
http://www.sendmail.org/
在Fedora Core 5安装时,默认会自动安装Sendmail服务器,其内置的Sendmail服务器版本为sendmail-8.13.5-3,如果不知道是否已安装此版本的软件,可以使用以下方法来判断:
[root@ns1 ~]# rpm -qa sendmail
sendmail-8.13.5-3
如果需自行安装Sendmail服务器,请参考之前章节的安装步骤,利用“软件包管理者”程序进行安装,如-7所示。
-7   安装Sendmail服务器
在安装Sendmail服务器后,最简单的启动方法如下:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail restart
正在关闭 sendmail:确定  ]
正在关闭 sendmail:确定  ]
正在启动 sendmail:确定  ]
正在启动 sm-client:确定  ]
可以利用以下的方法重新启动Sendmail服务器:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail restart
正在关闭 sendmail:确定  ]
正在关闭 sendmail:确定  ]
正在启动 sendmail:确定  ]
正在启动 sm-client:确定  ]
可以利用以下的方法停止Sendmail服务器:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail stop
正在关闭 sendmail:确定  ]
正在关闭 sm-client:确定  ]
可以利用以下的方法查看Sendmail服务器目前执行的状态:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail status
sendmail (pid 3011 3002) 正在执行...
因为E-mail服务是系统中相当重要的工作,所以在一般情形下,应该在引导时自动启动Sendmail,以节省每次手动启动的时间。要在引导时自动启动Sendmail服务器,可以使用以下方法:
[root@ns1 ~]# chkconfig --level 5 sendmail on
[root@ns1 ~]# chkconfig --list | grep sendmail
sendmail  0:关闭1:关闭2:打开3:打开4:打开5:打开6:
以上表示如果系统执行Run Level 2、3、4、5时,就会自动启动Sendmail服务器(sendmail),也可配合“--list”参数的使用,显示每个Run Level是否自动执行Sendmail服务器。
注意:有关其他Sendmail在引导时自动启动的方法,请参考之前章节说明。
测试Sendmail服务器
在完成以上的安装、启动及设置步骤后,接下来可以通过telnet命令登录到Sendmail服务器上的25连接端口,测试Sendmail服务器是否正确启动,以下是一个简单的示例:
[jack@ns1 jack]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ns1.fc5linux.com ESMTP Sendmail 8.13.5/8.13.5; Mon, 27 Mar 2006 11:37:04 +0800
^]
# 按Ctrl + ]可以中断连接
telnet> q
# 按q可以退出
Connection closed

推荐阅读
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文提供了多种有效的方法来解决RPC(远程过程调用)服务器不可用的问题,包括通过修改注册表、使用SC命令以及利用故障恢复控制台等技术手段。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 在使用 PyInstaller 将 Python 应用程序打包成独立的可执行文件时,若项目中包含动态加载的库或插件,需要正确配置 --hidden-import 和 --add-binary 参数,以确保所有依赖项均能被正确识别和打包。 ... [详细]
  • Ubuntu系统下的GIF动画录制解决方案
    在撰写文章或教程时,GIF动态图能够有效地传达信息。对于Windows用户而言,ScreenToGif是一款非常实用的工具。而在Ubuntu系统中,用户同样拥有多种选择来创建GIF动画,本文将重点介绍两款录屏工具——Byzanz和Peek。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 本文介绍了实时流协议(RTSP)的基本概念、组成部分及其与RTCP的交互过程,详细解析了客户端请求格式、服务器响应格式、常用方法分类及协议流程,并提供了SDP格式的深入解析。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
author-avatar
荡平三界_713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有