当前位置: 主页 > 服务器技术 > Mail服务器 > 详解邮件MTA功能

详解邮件MTA功能

时间:2010-7-9来源:互联网 点击:
     TA 的主要功用是在不同的主機之間做郵件的轉送動作, 在 Internet 上現在最有名的 TA 要算是非 sendmail 莫屬, 其最新版本是 8.12.9 (2003/03/29), 這裡的介紹也全都是以 sendmail 為例子

TA 運作的基本說明

如上圖所示, 當 user1@hostA 寄一封信件給 user2@hostC 時, sendmail 會負責將信件由 hostA 傳送到 hostC, 然後由 hostC 上面的 DA 將信件送到 user 的信箱中

接下來我們看看 UA, TA, DA 實際上是如合運作的, 如下圖所示

1.hostA 上的 user1 用 mail reader(UA) 寫了一封信, 寄給 user2@hostC
2.這封信立刻交由 sendmail(TA) 送往 hsotC
3.hostA 上的 sendmail 與 hostC 上的 sendmail 透過 SMTP (simple mail transfer protocol)交談, 轉送彼此的信件
4.當信件無法立刻送往 hostC 時, sendmail 將信件暫存到系統的 Mail Queue (/vap/spool/mqueue/), 等過一段時間再送
5.hostC 上的 sendmail 收到信件後, 首先判斷這封信件的目的地是否為 hostC, 如果不是則 sendmail 再往其它的 host 送, 如果這封信件的目的地是 hostC, 將其交由 local deliver (/usr/libexec/mail.local) 處理
6.local deliver (DA) 將信件寫入系統信箱目錄(/var/mail/)中的 user2 這個檔案
7.hostC  上的 user2 用 mail reader(UA) 讀取系統信箱, 然後信件被存到使用者個人信箱中
 

sendmail 的權限設定

sendmail 有時會由一般使用者來執行, 但是它卻需要寫入一些系統的目錄(如 /var/mail/, /var/spool/mqueue/), 所以 sendmail 的權限是 owner:root, group:bin, mode:4555(-r-sr-xr-x), 也就是 setuid root, 這樣的設定讓 sendmail 每次執行都能有 root 的權限.
 

使用別名 (/etc/aliases)

在 /etc/aliases 這個檔案中定義了在一部機器中的別名, 看看這個例子

user1@hostA 寄一封信件給 user2@hostB, 當 hostB 上的 sendmail 收到這封信時, 它檢查 /etc/alias.db 這個檔案的內容, 發現 user2 是 user3@hostC 的別名, hostB 會將收信人改成 user3@hostC, 並且將信件送往 hostC.

ps: 當我們在對 /etc/aliases 做了任何修改之後, 要執行 newaliases 這個命令, 這些修改才會寫到 /etc/alias.db, 被 sendmail 所參考
 

使用信件轉送 .forward

前述的 /etc/aliases.db 會讓信件產生轉送的動作, 不過那是屬於系統的, 每個使用者如果想要控制自己的信件轉送, 可以在自己的目錄下建立 .forward 這個檔案, 這個檔案的內容是一個 email address, 代表使用者收到的信件要轉到那個 email address 去, 看看這個例子

user1@hostA 寄一封信件給 user2@hostB, 當 hostB 上的 sendmail 收到這封信時, 它檢查 user2 目錄中的 .forward 這個檔案的內容, 發現 user2 的信件要轉給 user3@hostC 這個 email address, 因此 hostB 會將收信人改成 user3@hostC, 並且將信件送往 hostC.
 

DNS 上的 MX 記錄

MX 是 mail exchanger 的簡稱, 當一部機器 hostC 在 DNS 有如下的 MX 記錄時,

hostC        IN    MX    50        hostB.ee.ncku.edu.tw
hostC        IN    MX    100      hostD.ee.ncku.edu.tw

代表的意義是 hostB 和 hostD 是 hostC 的 mail exchanger, 且 hostB 的優先權比 hostD 高
參考下面這個例子

hostA 在有信件送往 hostC 時, 會先到 DNS server 查詢 hostC 的 MX 記錄, 找到最高優先權的 mail exchanger, 也就是 hostB, 因此雖然收信人是 user2@hostC, hostA 還是會將信件送往 hostB.
hostB 在收到這封信件後, 發收收信地址主機是 hostC 而不是自己, 它會將信件再轉往 hostC. 在這個例子中, hostB 接受 hostA轉來, 但目的地卻是 hostC 的信件, 並將之送往 hostC, 我們稱 hostB 這個動作叫 Relay.

ps: 當 hostA 找到 hostB 和 hostD 這兩個 mail exchanger 時, 它會先嘗試透過優先權較高 (數值較小) 的 host B傳送信件, 當 hostB 當掉時, hostA 會改透過 host D 去送信, 但是當 hostD 要這封信送往 hostC 時, 一樣會到 DNS 查詢 hostC 的 MX 記錄, 把信件轉往比自己優先權高的 hostB.此時若是 hostB 仍然是當掉的, 那麼信件會被放在 hostD 的 mail queue 中, 等待時間再送往 host B. 換句話說, 無論有幾個 MX, 其中數值最小的那個 exchanger 是必經之地, 所有的信件一定要通過這個 exchnager 才會到達目的地

站长资讯网
. TAG: 邮件 MTA
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言