一、基本知識:
sendmail是在unix環境下使用最廣泛的郵件傳輸代理程式,sendmail郵件伺服器的特點是功能強大但配置複雜,sendmail的版本升級非常頻繁,可以通過telnet到主機的25號連線埠來判斷該主機使用的sendmail版本號。例如:
telnet xxx.xxx.xxx.xxx 25
220 xxx.xxx.xxx.xxx esmtp sendmail 8.12.1/8.12.1; thu, 22 aug 2002 10:33:21 +0800 (eat)
上述信息表明該主機運行的是sendmail8.12.1。版本號一般由被兩個圓點分開的三個數字組成。當前運行的絕大多數是sendmail 8.x.x。如果在sendmail伺服器上,可以運行sendmail –d0.4來查看版本情況,例如:version aix4.3/8.12.1
sendmail的啟動、停止和刷新,可以使用以下命令:
startsrc –s sendmail,也可以帶參數:startsrc –s sendmail -a "-bd -q30m"
stopsrc –s sendmail
refresh –s sendmail
查看sendmail的狀態:
lssrc –s sendmail
配置開機自動啟動sendmail
編輯/etc/rc.tcpip,找到start /usr/lib/sendmail這一行,如果被注釋掉了,取消注釋,找到並設定qpi參數,預設是30分鐘,即qpi=30m(s代表秒,m代表分鐘,h代表小時,d代表天,w代表星期)。m是預設。
手工啟動sendmail如:
sendmail –q15m
-q 後面的參數值同qpi。 sendmail是一個守護進程(daemon),是一個信息路由程式,sendmail通過syslogd daemon來記錄郵件系統的活動。要能夠做到這一點,/etc/syslog.conf 必須包括以下行:
mail.debug /var/spool/mqueue/log
如果/var/spool/mqueue/log不存在, touch /var/spool/mqueue/log
然後重起syslogd:refresh –s syslogd
郵件佇列目錄是/var/spool/mqueue,郵件佇列的內容可以由mailq或sendmail –bp列印出來。郵件佇列包含四類郵件佇列檔案:數據檔案、控制檔案、臨時檔案和抄本檔案。檔案的格式如下:
dfaa00312 數據檔案
qfaa00312 控制檔案
tfaa00312 臨時檔案
xfaa00312 抄本檔案
顯示郵件的統計信息:
touch /var/tmp/sendmail.st,此檔案必須先建立,否則無法用mailstats來查看統計信息.
使用郵件別名和轉發:
別名的定義放在/etc/aliases檔案中,舉例添加一個別名manager,在/etc/aliases中增加一行:
manager:caddy,zhang,
再對這個別名產生一個所有者,如果sendmail對這個別名傳送郵件有誤,它會發一個出錯信息給所有者。 在/etc/aliases中增加一行:
owner-manager:
用newaliases或 sendmail –bi重新編譯/etc/aliases,再重起sendmail,mail manager 就可以給caddy,zhang,發郵件了。
轉發郵件可以使用/etc/aliases,也可以使用$home/.forward。
使用/etc/aliases的例子:
tom:zhang,
這樣的話,tom收不到任何郵件,郵件發給zhang, ,如果tom也希望收到,上一行做如下修改:
tom:\tom,zhang,
自動刪除tom的郵件:
tom:/dev/null
使用$home/.forward的例子:
編輯該用戶(假設是tom)主目錄下的.forward檔案如下:
zhang,
如果tom也希望收到,上一行做如下修改:
\tom,zhang,
自動刪除tom的郵件:
/dev/null 對$home/.forward的修改一存檔就即刻生效,不象/etc/aliases還需重新編譯。
發郵件給本機用戶:mail tom
發郵件給本網路其它主機用戶:mail john@mars mars為主機名
給internet信箱用戶發郵件:
使用bnu或uucp發郵件:mail @internetsystem:uucpsystem!username
郵件的存儲:
系統信箱為/var/spool/mail目錄下,用戶一旦讀取就自動保存在$home/mbox目錄下,如果在產生郵件過程中被中斷,就將這些不完整的信息存放在$home/dead.letter。
二、配置sendmail通過smtp伺服器發internet郵件:
在tcp/ip網路中,常見的三種主機名解析方法是:dns、nis、etc/hosts,如果/etc/resolv.conf存在則先用dns解析,如果要改變解析順序,可以修改/etc/netsvc.conf 或變數nsorder(其優先權高於/etc/netsvc.conf )如在/etc/netsvc.conf 中可定義hosts=local,nis,bind,也可設定nsorder=local,nis
1.有dns的情況
sendmail 預設設定與dns一起工作,不需要對/etc/sendmail.cf做任何修改,設定好/etc/resolv.conf並能連通dns伺服器,就可以發internet郵件了。
2.使用smtp代理的情況
smtp的全稱即為“簡單郵件傳輸協定”,它負責郵件在兩台伺服器或客戶端之間進行交換。習慣上,如果源伺服器/客戶端將郵件通過smtp協定傳送到其目標伺服器上,我們將其稱之為“投遞”,否則稱之為“中繼”(relay) smtp服務具有以下幾個顯著的特點:
1.smtp服務是匿名服務,並不要求確認發件人與收件人的真實身份;
2.smtp服務是明文服務,所有經過smtp傳輸的內容均以明文傳送。
使用smtp代理的情況下,需要對/etc/sendmail.cf做些修改,先要修改ds項,這是配置用來轉發郵件的主機。格式如下:
smtp主機的定義: ds
的主機名
或者
dssmtp:[xxx.xxx.xxx.xxx] àsmtp的ip地址
本機的定義: dw, dm和cw
sendmail 預設自動定義 dw (本機的主機名), dm (域名) 和 cw (主機別名) 。格式如下:
dwxxx //主機名緊挨著dw寫
cwlocalhost
配置完畢後重起sendmail服務,然後可以用sendmail –d0.4查看域名的情況和sendmail版本情況,傳送郵件可以用mail –v 顯示詳細的傳送信息。
如:
顯示信息如下:
發件人的名字就是:用戶名
250-auth login cram-md5 plain
250-auth=login cram-md5 plain
250-pipelining
250 8bitmime
>>> mail from:<用戶名
250 ok
>>> rcpt to:
250 ok
>>> data
354 go ahead
>>> . à結束符<回車><換行>.<回車><換行>
250 ok 1024473751 qp 1714
closing connection to [xxx.xxx.xxx.xxx]
>>> quit
其中>>>後面顯示的內容可以手工輸入,可以telnet xxx.xxx.xxx.xxx(smtp代理主機名) 25,一步一步輸入,測試整個郵件傳送過程,找到故障原因所在。