FreeBSD 研习课程讲义
Prev 邮件伺服器 Next

Mail 系统概论

Mail 系统简单的说是由: User Agent, Transport Agent 和 Deliver Agent 三者所组成的

User Agent (UA:读信、写信程式)

使用者所使用的读信、写信程式,比如在 unix 环境中最阳春的 mail,其他在 unix 的 UA 还有 pine、elm、mutt 等等,在 Windows 环境下的 Outlook 也都算是 UA 的一种。
UA 负责接收使用者的命令,提供方便的读、写信件的环境,但并不负责实际传递信件的工作。

Transport Agent (TA:转送信件程式)

真正负责在 Internet 中转送信件的程式,最有名的就是 Sendmail 这个程式了,TA 在收到 UA 传来的信件后,会根据信件的目的地作一些位址判别的动作,然后将信件转送往目的地。
有时候信件并不会一次就送往目的地去,而是先转到其它主机的 TA,再转送到目的地去,比如说要去的目的地主机暂时故障,或是目的地主机无法直接收到外来的 mail。
因此 TA 除了接受 UA 传来的信件外,也要接收其它 TA 传来的信件,并帮忙把这封信件转送到目的地主机,这个动作我们称之为 relay

Deliver Agent (DA:接收信件程式)

TA 在收到一封信件后,首先便是判断这封信件的目的地是不是自己,如果不是当然继续转送的动作;如果目的地是自己时,TA 便会把这封信件交由 DA 来处理,DA 会负责真正地将信件传给目的地主机上的收信人。

E-mail 基本概念

基本上Sendmail 是一个MTA (Mail Transfer Agent) 的程式,所以它并不负责处理Mail 和使用者之间的介面 ,或是 Deliver Mail 的工作。

它的作法是,依据不同的 e-mail 的地址,将 mail传送的不同的 Mail程式。所以我们可以在 Sendmail.cf (这个是 Sendmail 主要的设定档,它决定了Sendmail 是如何工作的) 中找到以下几行:

Mlocal, P=/usr/libexec/mail.local, F=lsDFMAw5:/|@qrmn9, S=10/30, R=20/40,
T=DNS/RFC822/X-Unix,
A=mail -d $u

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,
T=X-Unix,
A=sh -c $u
Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h

Mesmtp, p=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h

Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=IPC $h

Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040,
T=DNS/RFC822/SMTP,
A=IPC $h

其中 M 代表是一个命令,用来设定 sendmail使用的邮件传送程式 (mailer),命令语法如下:

Mname, {field=value}

name 是 sendmail 叁考这个mailer的名称, 其中有两个 name 是固定且必要的:
  local: 传递自己系统上的邮件给自已系统上的使用者的邮件程式,如 mail anchor
  prog:传递邮件给其它程式的邮件程式,如 mail ls@localhost ,其中 ls 在/ etc/aliases 中定义为
ls: "| /usr/local/bin/ls"
filed 叁数设定:
  P:path 邮件程式的路径
  F:Flags 这个邮件程式所使用的旗标
  S:Sender 发信人的 Rewrite Ruleset
  R:Recipient 收信人的 Rewrite Ruleset
  A:Argv 邮件程式的引数
  E:Eol 一行结束的字串

於是当我们写好以上的设定之后,sendmail就可以根据以上的 mailer 设定将适当的 mail 送到指定的邮件程式,不过在这之前它们的Recipient Adderess 和Sender Adderess 会先被所指定的Ruleset 进行Rewrite动作。

 

Ruleset重写规则

重写规则是 sendmail.cf 中的档案精华,透过这些规则,Sendmail可以将使用者的邮件地址进行解析,然后加以适当的处理,甚至可以挡掉许多不必要的垃圾信,和不合法的Request。

 


Prev Home Next
  UP 设定 sendmail