linux下sendmail郵件系統安裝操作記錄

散盡浮華發表於2016-12-08

 

sendmail是linux系統中一個郵箱系統,如果我們在系統中配置好sendmail就可以直接使用它來傳送郵箱。
sendmail的配置檔案
/etc/mail/sendmail.cf :Sendmail的主配置檔案;
/etc/mail/access :中繼訪問控制;
/etc/mail/domaintable ;域名對映;
/etc/mail/local-host-names ;本地主機別名;
/etc/mail/mailertable :為特定的域指定特殊的路由規則;
/etc/mail/virtusertable :虛擬域配置。

中繼的配置
是指一臺伺服器接受並傳遞源地址和目的地址都不是本伺服器的郵件。
在兩個檔案中進行設定:
/etc/mail/relay-domains
/etc/mail/access。

廢話不多說了,下面分享下sendmail在linux系統下的安裝部署記錄:

一、安裝軟體
[root@slave-node ~]# yum install -y sendmail
[root@slave-node ~]# yum install -y sendmail-cf

啟動saslauthd服務進行SMTP驗證(預設是安裝的,如果沒有,就手動安裝)
[root@slave-node ~]# service saslauthd start
Starting saslauthd: [ OK ]

二、郵件服務配置(iptables防火牆關閉)
1)配置Senmail的SMTP認證
將下面兩行內容前面的dnl去掉。在sendmail檔案中,dnl表示該行為註釋行,是無效的,因此通過去除行首的dnl字串可以開啟相應的設定行。
[root@slave-node ~]# vim /etc/mail/sendmail.mc
......
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

2) 設定Sendmail服務的網路訪問許可權(如果是直接本機呼叫,可以不用操作,採用預設的127.0.0.1。不過最後還是改成0.0.0.0)
將127.0.0.1改為0.0.0.0,意思是任何主機都可以訪問Sendmail服務。
如果僅讓某一個網段能夠訪問到Sendmail服務,將127.0.0.1改為形如192.168.1.0/24的一個特定網段地址。
[root@slave-node ~]# vim /etc/mail/sendmail.mc
......
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

3)生成配置檔案
Sendmail的配置檔案由m4來生成,m4工具在sendmail-cf包中。如果系統無法識別m4命令,說明sendmail-cf軟體包沒有安裝
[root@slave-node ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

4)啟動服務(如果發現sendmail dead but subsys locked,那就執行"service postfix status"檢視postfix是否預設開啟了,如果開啟的話,就關閉postfix,然後再啟動或重啟sendmail服務即可。)
[root@slave-node ~]# service sendmail start
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
[root@slave-node ~]# service saslauthd restart
Stopping saslauthd: [ OK ]
Starting saslauthd: [ OK ]

將服務加入自啟行列
[root@slave-node ~]# chkconfig sendmail on
[root@slave-node ~]# chkconfig saslauthd on
[root@slave-node ~]# chkconfig --list |grep sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@slave-node ~]# chkconfig --list |grep saslauthd
saslauthd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

三、測試傳送郵箱
(1)第一種方式:安裝sendmail即可使用。
[root@slave-node ~]# yum -y install mailx

建立一個郵件內容檔案,然後發郵件(注意-s引數後的郵件標題要用單引號,不能使用雙引號,否則發郵件會失敗!)
[root@slave-node ~]# echo 'This is test mail'>/root/content.txt
[root@slave-node ~]# cat /root/content.txt
This is test mail
[root@slave-node ~]# mail -s 'Test mail' wang_shibo***@163.com < /root/content.txt

檢視已收到郵件:

 

如果不想通過檔案傳送郵件內容也可以這麼傳送,也可以使用管道符直接傳送郵件內容,效果同檔案傳送郵件內容一樣
[root@slave-node ~]# echo "This is test mail" | mail -s '666666' wang_shibo***@163.com
檢視已收到郵件:

如果是傳送給多個郵件,就使用-c引數,如下:
[root@slave-node ~]# echo "This is test mail" | mail -s 'test' -c wang_shibo***@sina.com wang_shibo***@163.com

如遇下面報錯,解決辦法:

傳送郵件:
[root@mail-server ~]# echo "This is test mail" | mail -s '666666' wangshibo@kevin.com

發現收不到郵件,檢視sendmail日誌,報錯資訊如下:
[root@mail-server ~]# tail -f /var/log/maillog
.......
Feb 12 03:35:13 mail-server sendmail[21905]: My unqualified host name (mail-server) unknown; sleeping for retry
Feb 12 03:37:12 mail-server sendmail[22061]: w1BJb8KM022059: to=<wangshibo@kevin.com>, ctladdr=<root@mail-server> (0/0), delay=00:00:03, xdelay=00:00:03, 
mailer=esmtp, pri=120476, relay=mx1.kevin.com. [128.1.41.15], dsn=4.0.0, stat=Deferred: 450 Requested mail action not taken: Invalid sender

分析原因:
這是由於主機名沒有正確解析導致的。
[root@mail-server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.202 mail-server

[root@mail-server ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mail-server

解決辦法:
[root@mail-server ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.202 mail-server.localdomain mail-server
[root@mail-server ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mail-server

[root@mail-server ~]# rm -rf /var/spool/mqueue/*
[root@mail-server ~]# /etc/init.d/sendmail restart
Shutting down sm-client:                                   [  OK  ]
Shutting down sendmail:                                    [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

再次使用mail傳送郵件就正確了!
[root@mail-server ~]# echo "This is test mail" | mail -s '666666' wangshibo@kevin.com
[root@mail-server ~]# tail -f /var/log/maillog
.......
Feb 12 03:42:31 mail-server sendmail[22293]: STARTTLS=client, relay=mx1.kevin.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES256-GCM-SHA384, bits=256/256
Feb 12 03:42:31 mail-server sendmail[22299]: STARTTLS=client, relay=mx1.kevin.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES256-GCM-SHA384, bits=256/256
Feb 12 03:42:31 mail-server sendmail[22302]: STARTTLS=client, relay=mx1.kevin.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES256-GCM-SHA384, bits=256/256
Feb 12 03:42:33 mail-server sendmail[22284]: STARTTLS=client, relay=mx1.kevin.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES256-GCM-SHA384, bits=256/256
Feb 12 03:42:34 mail-server sendmail[22293]: w1BJgTcF022288: to=<wangshibo@kevin.com>, ctladdr=<root@mail-server.localdomain> (0/0), delay=00:00:05, xdelay=00:00:05, mailer=esmtp, pri=120510, relay=mx1.kevin.com. [116.115.114.9], dsn=2.0.0, stat=Sent (Mail OK queued as AQAAfwB3EaEnDYFaHrpiAA--.12694S3)
Feb 12 03:42:35 mail-server sendmail[22302]: w1BJgUPI022300: to=<wangshibo@kevin.com>, ctladdr=<root@mail-server.localdomain> (0/0), delay=00:00:05, xdelay=00:00:05, mailer=esmtp, pri=120510, relay=mx1.kevin.com. [115.123.124.105], dsn=2.0.0, stat=Sent (Mail OK queued as AQAAfwDXQD0oDYFaoMJxAA--.21712S3)
Feb 12 03:42:36 mail-server sendmail[22299]: w1BJgToO022294: to=<wangshibo@kevin.com>, ctladdr=<root@mail-server.localdomain> (0/0), delay=00:00:06, xdelay=00:00:06, mailer=esmtp, pri=120510, relay=mx1.kevin.com. [115.123.124.105], dsn=2.0.0, stat=Sent (Mail OK queued as AQAAfwB3HTonDYFancJxAA--.21596S3)
Feb 12 03:42:40 mail-server sendmail[22284]: w1BJgSAl022282: to=<wangshibo@kevin.com>, ctladdr=<root@mail-server.localdomain> (0/0), delay=00:00:12, xdelay=00:00:12, mailer=esmtp, pri=120510, relay=mx1.kevin.com. [139.162.158.182], dsn=2.0.0, stat=Sent (Mail OK queued as AQAAfwDHp2QmDYFayl55AA--.6056S3)

(2)第二種方式:利用外部的smpt伺服器
上面第一種方式中,/bin/mail命令會預設使用本地sendmail傳送郵件,這樣要求本地的機器必須安裝和啟動Sendmail服務,配置非常麻煩,而且會帶來不必要的資源佔用。
而通過修改配置檔案可以使用外部SMTP伺服器,可以達到不使用sendmail而用外部的smtp伺服器傳送郵件的目的。

修改/etc/mail.rc檔案(有的版本叫/etc/nail.rc,新增下面內容:
set from=fromUser@domain.com smtp=smtp.domain.comset smtp-auth-user=username smtp-auth-password=passwordset smtp-auth=login

引數說明:
from是傳送的郵件地址
smtp是發生的外部smtp伺服器的地址
smtp-auth-user是外部smtp伺服器認證的使用者名稱。注意一定要填寫郵件全稱!!
smtp-auth-password是外部smtp伺服器認證的使用者密碼
smtp-auth是郵件認證的方式

配置完成後,就可以正常傳送郵件了,如下
[root@slave-node ~]# vim /etc/mail.rc                     //在檔案底部新增
set from=ops@huanqiu.cn smtp=smtp.huanqiu.cn smtp-auth-user=ops@huanqiu.cn smtp-auth-password=zh@123bj smtp-auth=login

現在開始發郵件:
[root@slave-node ~]# echo "hello world" |mail -s 'test666' wangshibo@huanqiu.cn

相關文章