歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

郵件傳輸原理及相關入門知識概述

在討論email服務器以前,理解電子郵件的工作機制是非常重要的。在通常的情況下,一封電子郵件的發送需要經過用戶代理,傳輸代理和投遞代理等三個程序的參與。
當用戶發送一封電子郵件時,他並不能直接將信件發送到對方郵件地址指定的服務器上,而是必須首先試圖去尋找一個信件傳輸代理,把郵件提交給它;信件傳輸代理得到了郵件後,首先將它保存在自身的緩沖隊列中,然後,根據郵件的目標地址,信件傳輸代理程序查詢到應對這個目標地址負責的郵件傳輸代理服務器,並且通過網絡將郵件傳送給它。對方的服務器接收到郵件之後,將其緩沖存儲在本地,直到電子郵件的接收者察看自己的電子信箱。顯然,郵件傳輸是從服務器到服務器的,而且每個用戶必須擁有服務器上存儲信息的空間(稱為信箱)才能接受郵件。(發送郵件不受這個限制)。
而投遞代理則從信件傳輸代理取得信件傳送至最終用戶的郵箱。顯然,最終用戶只能看到用戶投遞代理。常見的投遞代理包括procmail等。
用戶代理接受用戶輸入的各種指令,將用戶的郵件傳送至信件傳輸代理或者通過pop、Imap將信件從傳輸代理服務器處取到本機上。常見的用戶代理有“foxmail”,“outlook express”等郵件客戶程序。
可以看到,一個郵件傳輸代理的主要工作是監視用戶代理的請求,根據電子郵件的目標地址找出對應的郵件服務器,將信件在服務器之間傳輸並且將接收到的郵件緩沖或者提交給最終投遞程序。
有許多的程序可以作為信件傳輸代理,包括qmail、sendmail、postfix等等。
無論什麼產品,它們必須支持同樣的規范,如傳輸信件的報文格式,監聽的端口等等。一般來說,系統管理員並不需要了解信件傳輸的命令標准,用戶代理會生成正確的命令。但是,了解一些相關信息是重要的。
信件傳輸代理默認監聽25號端口接受請求,當接受用戶的請求時,它不需要了解用戶的真實身份,或者說不需要身份驗證。因此用戶不需要提交用戶口令就可以發出電子郵件,這意味著任何用戶都可以冒充成另外一個用戶發出假的電子郵件,這是電子郵件原始設計時導致的一個特點,無法消除。(關於這一點目前有一點說明。許多基於UNIX的系統運行indentd,可以記錄客戶機器上的用戶的登錄名字。不過,這個功能實際上用處不大,畢竟大部分人不會用UNIX/Linux作為他的個人機器)。
當郵件服務器程序得到一封待發送的郵件時,它首先需要根據目標地址確定將信件投遞給哪一個服務器,這是通過DNS服務實現的。例如,有一封郵件的目標地址是[email protected],那麼,sendmail首先確定這個地址是用戶名(someone)+機器名(yahoo.com)的格式,然後,通過查詢DNS來確定需要把信件投遞給某個服務器。
DNS數據中,與電子郵件相關的是MX記錄,這可以在查詢DNS時設置查詢類型為mx來得到:
[wanghy@mail ~]$ nslookup
Default Server: www.linuxaid.com.cn
Address: 202.99.11.120
>set q=mx
>yahoo.com
Server: www.linuxaid.com.cn
Address: 202.99.11.120
Non-authoritative answer:
yahoo.com preference = 0, mail exchanger = mx1.mail.yahoo.com
yahoo.com preference = 1, mail exchanger = mx2.mail.yahoo.com
mx1.mail.yahoo.com internet address = 128.11.68.225
mx2.mail.yahoo.com internet address = 128.11.68.217
顯然,在DNS中說明yahoo.com有兩個信件交換(MX)服務器,於是,sendmail試圖將郵件發送給兩者之一。一般來說,排在前面的的MX服務器的優先級別比較高,因此服務器將試圖連接mx1.mail.yahoo.com的25端口,試圖將信件報文轉發給它。如果成功,你的smtp服務器的任務就完成了,在這以後的任務,將由mx1.mail.yahoo.com來完成。在一般的情況下,mx交換器會自動把信件內容轉交給目標主機,不過,也存在這樣的情況,目標主機(比如yahoo.com)可能並不存在,或者不執行smtp服務,而是由其mx交換器來執行信件的管理,這時候,最終的信件將保存在mx機器上,直到用戶來察看它。
可以簡單地在DNS記錄中用MX關鍵字設置信件交換,例如,在我們的設置中:
$TTL 3600
@ IN SOA linuxaid.com.cn. webmaster.linuxaid.com.cn. (
                        2001050902 ;Serial
                        10800 ;Refresh after 3 hours
                        3600 ;Retry hourly
                        604800 ;Expire after 1 week
                        10800 ;Time to live
)
IN NS ns.linuxaid.com.cn.
IN A 202.99.11.120
IN MX 10 mx.linuxaid.com.cn.
IN MX 20 mx1.linuxaid.com.cn.
ns IN A 202.99.11.120
www IN A 202.99.11.120
mx IN A 202.99.11.120
mx1 IN A 202.99.11.121
sales IN MX 10 sales-mail.linuxaid.com.cn.
這裡面定義了二個MX記錄,MX記錄的規則是“[機器名/域名] IN MX [優先級] [服務器]”。優先級是一個整數,數值越小優先級越高。第一個IN MX 10 mx.linuxaid.com.cn.,因為沒有機器名,使用來自named.conf的缺省後綴,就是linuxaid.com.cn,這就是讓所有[email protected]的信件傳送到mx.linuxaid.com.cn。IN MX 20 mx1.linuxaid.com.cn.的概念差不多,只是其優先數為20,也就是說只有當mx.linuxaid.com.cn拒絕接受(比如服務器忙或者當機)的時候,信件才會投遞到mx1.linuxaid.com.cn。“sales IN MX 10 sales-mail.linuxaid.com.cn.”定義凡是[email protected]的信件要發送到sales-mail.linuxaid.com.cn。
MX記錄可以使得整個子域內的用戶使用同樣的郵件主機和傳輸代理。另外如果你的主機暫時宕機了,那麼信件可以暫時存儲在你的信件交換主機上,直到你自己的機器恢復為止。比如說,mail.yourdomain.com是一台smtp主機,而mx2.yourdomain.com是另外一個smtp主機,你希望在mail.yourdomain.com正常的時候直接由其自身收發郵件,而萬一mail崩潰,mx2為它暫時存儲一段時間的郵件直到mail恢復正常工作-這是常見的設置,那麼,你需要把mail以比較高的優先數設置成自己的信件交換主機,而mx2作為一個優先數較低的信件交換主機,也就是,在你的DNS配置文件中,應該這樣配置:
     IN MX 0 mail
     IN MX 10 mx2
如果DNS查詢無法找出對某個地址的MX記錄(通常因為對方沒有信件交換主機),那麼sendmail將是試圖直接與對方的主機(來自郵件地址)對話並且發送郵件。例如,[email protected]在DNS中沒有對應的MX記錄,因此sendmail在確定MX交換器失
Copyright © Linux教程網 All Rights Reserved