⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电子邮件概述.htm

📁 台大计中UNIX讲义
💻 HTM
📖 第 1 页 / 共 3 页
字号:
     250-VERB
     250-8BITMIME
     250-SIZE
     250-DSN
     250-ONEX
     250-ETRN
     250-XUSR
     250 HELP
     >>> MAIL From:<hbwork@helius.dlut.edu.cn> SIZE=11795
     250 <hbwork@helius.dlut.edu.cn>... Sender ok
     >>> RCPT To:<hbwork@dlut.edu.cn>
     250 <hbwork@dlut.edu.cn>... Recipient ok
     >>> DATA
     354 Enter mail, end with "." on a line by itself  
     >>> .
     250 KAA13174 Message accepted for delivery
     hbwork@dlut.edu.cn... Sent (KAA13174 Message accepted for delivery)
     Closing connection to gingko.dlut.edu.cn.
     >>> QUIT
     221 gingko.dlut.edu.cn closing connection 

     了解SMTP协议之实现, 请参考RFC 821.
     
三. DNS与Email之关系
1. 概述
   计算机之间通讯使用IP地址,而用户为了使用方便通常使用主机名,DNS则提供
主机名与IP之间的相互解释及其他重要信息.
   DNS: 分布式管理系统,将主机的命名及编号分发给各个自治区,如dlut.edu.cn
域只负责维护自己域内的所有主机的信息,当hosta.dlut.edu.cn要向
hostb.dlut.edu.cn发信或telnet时,只需查询大工的dns服务器,dns服务器会将
hostb.dlut.edu.cn的ip地址返回给主机hosta,并且由于edu.cn已经将dlut.edu.cn
域的管理授权给大工,大工的dns服务器为dlut.edu.cn之授权服务器,因此它可以回答
所有关于dlut.edu.cn域的dns查询,而不管查询请求来自本域还是域外的主机.
    当两个域之间的主机发送电子邮件时情况如何呢? 比gingko.dlut.edu.cn上的
一个用户向user@pub.dl.lnpta.net.cn发送邮件,大工的dns服务器对域
dl.lnpta.net.cn没有任何了解,但它知道如何找到答案. 当域名服务器收到对非本域
内主机的请求时,将会向根域名服务器(root domain nameserver)请求对应域的授权
服务器的ip地址,如:
   cn:  
        cn      nameserver = NS.UU.NET
        cn      nameserver = IRAUN1.IRA.UKA.DE
        cn      nameserver = NS.EU.NET
        cn      nameserver = NS.SESQUI.NET
        cn      nameserver = NS.CNC.AC.cn
        cn      nameserver = DNS.EDU.cn
        cn      nameserver = NS.CN.NET

        Authoritative answers can be found from:
        NS.UU.NET       internet address = 137.39.1.3
        IRAUN1.IRA.UKA.DE       internet address = 129.13.10.90
        NS.EU.NET       internet address = 192.16.202.11
        NS.SESQUI.NET   internet address = 128.241.0.84
        NS.CNC.AC.cn    internet address = 159.226.1.1
        DNS.EDU.cn      internet address = 202.112.0.35
        NS.CN.NET       internet address = 202.97.16.195 
   net.cn:
        Server:  helius.dlut.edu.cn
        Address:  202.118.66.81

        Non-authoritative answer:
        net.cn  nameserver = ns.cnc.ac.cn
        net.cn  nameserver = ns.cn.net
        net.cn  nameserver = ns.bta.net.cn

        Authoritative answers can be found from:
        ns.cnc.ac.cn    internet address = 159.226.1.1
        ns.cn.net       internet address = 202.97.16.195
        ns.bta.net.cn   internet address = 202.96.0.133 
   lnpta.net.cn:
        Non-authoritative answer:
        lnpta.net.cn    nameserver = ns.dcb.ln.cn
        lnpta.net.cn    nameserver = ns.lnsyptt.net.cn

        Authoritative answers can be found from:
        ns.dcb.ln.cn    internet address = 202.96.75.68
        ns.lnsyptt.net.cn       internet address = 202.96.64.68
   
   dl.lnpta.net.cn:
        dl.lnpta.net.cn nameserver = ns.lnpta.net.cn
        ns.lnpta.net.cn internet address = 202.96.64.68 

   pub.dl.lnpta.net.cn
        Name:    pub.dl.lnpta.net.cn
        Address:  202.96.69.81 

   由上可以看出,dns是一个大的,分布式的数据库;此数据库含有主机到ip的映
射关系,此外DNS还含有其他信息,当sendmail发送邮件时,必须将接收者的主机名
翻译为IP地址,这个由DNS中的A记录实现,A记录是关于主机的最基础数据;每二个
主机信息则是MX记录, MX记录指出愿意为相应主机接收邮件的一个或多个邮件主
机列表.

2.邮件交换(MX, Mail Exchange)记录
     MX记录的意义及用处是什么?主机处理自己的邮件其不足是什么?没有mx记录
岂不是更简单一些? 事实刚好相反, 虽然邮件管理员的日常工作相当复杂,当MX
记录可提供如下功能, 从而将邮件管理的工作简单化:
    . 对于未连接Internet的主机(如UUCP Only Host)可以指明一个Internet主机
      为其接收邮件,如同具有一个Internet地址一样. 如主机hosta.dlut.edu.cn
      与cerius.dlut.edu.cn具有uucp连接,如果后者被定义为前者的MX, 则其他
      Internet主机仍可向hosta.dlut.edu.cn发信,当ceruis.dlut.edu.cn收到对
      hosta.dlut.edu.cn的信件时,会保持到与hosta建立连接,然后通过UUCP将信
      件转发给hosta.

    . 如UNIX主机pcsvr.dlut.edu.cn是一组PC的文件服务器,pc上有集成了SMTP客
      户端的MUA, 可以向外发信,但不能收信.如果此时发出的信件中的回信地址是
      user@pc1.dlut.edu.cn,接收者如何回信? 这时可以将pcsvr.dlut.edu.cn作为
      这些PC的MX.

    . 主机因为各种原因而不能正常连接到网络上,比如光缆损坏,当主机与Internet
      的连接断开后,网络上其他主机到此主机的邮件将存在邮件队列中,如果指定时
      时间内邮件未能发送,则邮件信息将返回给发送者. 此时如果设置一个MX主机
      作为中间环节,MX主机将暂时接收对此主机的邮件,并在相应主机恢复正常之后
      将重新发送到你的主机, 这些MX主机可以在你的网域内或域外,或二者均有,当
      然后者要更好一些,因为当你的主干网(WAN)损坏之后域内的主机均不能正常工作.

    . MX记录隐藏了一部分的细节信息,允许以更为灵活的方式重新配置你的本地网.
      如所有的人均知道我的邮件地址为hbwork@dlut.edu.cn, 不论那一台机器接收
      对域dlut.edu.cn的信件都是一样的,即使更改为主机名也无所谓;发信者感觉
      不到有任何区别.


    . 邮件发送及MX记录
      当一个SMTP Client向主机发送信件时,需要作的工作不仅是将主机名翻译为ip
      地址,它首先要查看相目标主机有无MX记录,如果有MX记录的话,将根据记录中所
      给出的权值对其进行排序,比如dns记录如下:

                dlut.edu.cn.    IN      MX      0 gingko.dlut.edu.cn.
                                IN      MX      10 hazel.dlut.edu.cn.
                                IN      MX      20 saint.synet.edu.cn.
      
      SMTP Client先试权值较小者,如果失败再试同网域内的备份MX,不行再试域外的
      备份MX主机,这种设置能够保证EMAIL正常运转,即使外界连接不正常.

      在收集并对MX记录排序之后,SMTP Client将取得MX记录的IP地址,并按其优先级高
      低进行邮件发送,这一点必须记住! 因为对于user@domain.com来说,并不意味着有
      一台主机domain.com,即使有也不一定是接收邮件的主机.

3. sendmail如何利用DNS
  Sendmail如通过以下4个方面使用DNS
  . 启动时sendmail要通过dns来得到本地的正式主机名,然后将此值赋值给宏$j(The 
    canonical hostname),如果dns还返回了其他名字,则这些别名将赋值给类(class)
    $=w(sendmail所有版本均支持此类,list of our other names).
  . 当另外一台主机连接到本机传输邮件时,本机的sendmail将通过DNS查询对方主机
    的正式名称(FQDN).
  . 当通过网络发送SMTP邮件时,sendmail通过DNS查询目标主机的主机地址(也可能是
    多个地址).
  . 当sendmail对每个规则RHS(右边的规则)的$[和$]进行扩展时,需要查询$[和$]之间
    的主机名或IP地址.

(1)取得本地主机的正式名称(FQDN)
    所有版本的sendmail取得本地主机的正式名称所采用的方法基本相同,首先是调作
    gethostname(3)取得本地主机名,其返回值根据在/etc/hosts中的每一项是FQDN
    还是短主机名而返回相应值.如果gethostname(3)调作失败, 则本地主机名设置
    为localhost; 然后再调用gethostbyname(3)以获得本地主机的正式名称以及别名.

    如果机器上没有Bind Library, 或者暂时无法编译或安装新版本的sendmail,可以
    修改sendmail.cf文件定义变量$j

    Dmyour.domain.com
    Dj$w.$m

(2)查询远程主机名

   当sendmail开始作为daemon运行时,sendmail创建一个 ,并将自己bind到此socket上,
   监听进入的SMTP连接,当远程主机连接到本地主机时,sendmail再使用accept(2)库
   程序来接收连接. accept过程向sendmail提供远程主机的IP地址,sendmail然后通过
   gethostbyaddr(2)将IP地址转化为对方的正式主机名.

   由于如下原因,sendmail需要知道对方主机的正式名称:
   . 将远程主机名与本地主机名进行比较,以防止sendmaill连接到自己
   . 在 HELP SMTP行中远程主机所宣称的主机名要与查询得到的主机名相比较,如果二
     者不同可以采取一定的处理,如拒收对方的邮件,这样可以防止邮件炸弹.
   . 将此值赋值给宏$s(Send host's name)
   . 在很多log信息中(由loglevel(L)选项确定)及Received:头中要包括有关远程主机
     的信息.
   
(3) 查询目标地址 
   当sendmail准备连接到远程主机进行邮件传送时,它首先要进行一系列的检查,所检查
的项目因版本不同而有所差别. 
   从sendmail 8.1开始, sendmail检查地址中的主机部分是否包括了方括号,如果有方
括号将忽略MX记录的查询.
   从v8.8开始, sendmail首先检查所选定的发送代理是否设置了F=0标志,如果设置了
此标志,则忽略对MX记录的查询.
  通常F=0用于Null Client配置,如下mc示例:
     define('SMTP_MAILER_FLAGS','0')
     FEATURE('nullclient','mail.dlut.edu.cn');
  如果sendmail被允许进行MX查找(由sendmail.cf确定), 则sendmail使用res_search()
bind库查找所对应的MX记录,对这些MX记录进行排队,并选择值最小的主机,如果V8找到
两个同值的MX记录,在排队时会进行随机排序. 在找到所有的MX记录或根本没有MX记录
时,sendmail加入由FullBackMxHost(v)所指定的主机.
   然后sendmail会依次向MX主机表中的每个主机发送信息,一次一个主机,直到有一个成
功或全部失败. 从sendmail V8.8开始,当此列表中的任一个主机返回5xx STMP代码(永
久性错误), sendmail会对其进行特殊处理.
    如果未找到MX记录,则sendmail向指定的主机发送信息,如果均失败,sendmail会试
图向FallBackMxHost选项中所指定的主机发送信息.
    不管有无MX记录,sendmail通过gethostbyname(2)得到相应主机的网络地址.

(4)设置MX记录
   MX记录只是DNS中将一个主机的邮件转到另外其他机器上的一种方法,具体各项含义请
   参考DNS配置部分,其一般形式如下:
        hostA   IN      MX      10      hostB
   或:
        hostA   IN      MX      10      hostA
                IN      MX      20      hostB
        
        应该说明的是后者中的第一条记录并非多余,这种设置方法有其特定的作用.

   记录MX记录所应注意的问题:
   . MX记录必须指向一个A(地址)记录
        hostA   IN      MX      10      hostB   ; 错误设置!
                IN      MX      20      hostC
        hostB   IN      MX      10      hostC
        hostC   IN      A       1.2.3.4
   . MX记录指向CNAME记录会引起额外的dns查找
        hostA   IN      MX      0       mailHub
        mailHub IN      CNAME   nfsmast
        nfsmast IN      CNAME   hostB
        hostB   IN      A       123.45.67.89

   . MX记录是非递归的
        hostA   IN      MX      0       hostB
        hostB   IN      MX      0       hostB
                IN      MX      10      hostC
        
        如上示例中如hostA/hostB全部down掉时,hostA的信件不会发送到hostC上去,
        否则会引起MX记录的循环,如上面的配置加上 hostC IN MX 10 hostA.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -