热门标签 | 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

推荐阅读
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 三、寻找恶意IP并用iptables禁止掉找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行, ... [详细]
  • 项目需要将音视频文件上传服务器,考虑并发要求高,通过七牛来实现。直接上代码usingQiniu.IO;usingQiniu.IO.Resumable;usingQiniu.RPC; ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • 定义#definePCAP_OPENFLAG_PROMISCUOUS1    定义适配器是否必须进入混杂模式。#definePCAP_OPENFLAG_DATATX_UDP2    ... [详细]
  • 实例详解ISA防火墙策略元素
    我们在前面的工作中已经实现了ISA2006的代理服务器功能,接下来我们要实现ISA的访问控制功能。很多公司都有控制员工访问外网的需求,例如有的公司不允许 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
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社区 版权所有