歡迎您光臨本站 註冊首頁

Fedora 6架設Sendmail郵件伺服器

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

(解決php發郵件NObody跟域名是localhost.domain問題)
弄了差不多一個星期,基本弄懂基本的東西,架設過程中,參考網上無數文章,現做一個綜合,並在重要的地方給予提醒
一:安裝必要的軟體
(1)查詢 rpm -qa sendmail m4
有結果顯示證明已經安裝了必要的軟體,沒有顯示請使用yum install sendmail 命令進行安裝(可以上網的情況下)或者利用系統盤進行安裝(有光碟的話,iso文件也可以)
(2)安裝關聯的套件
sendmail-dev, sendmai-doc sendmail-cf
推薦使用yum 安裝(yum install sendmai*或者掛載光碟進行安裝 rpm -ivh sendmail-*) 關於yum的使用,歡迎閱讀我轉載的yum基本使用:http://zm177cm.blog.163.com/blog/static/114612382007102045940710
(3)安裝成功以後
vi /etc/mail/local-host-names 打開這個文件 然後在裡面加入你想發郵件的時候用到的域名(可以是虛擬的,但不推薦使用現存 的,有侵權的嫌疑~ 也容易發生錯誤) 例如

[root@localhost named]# cat /etc/mail/local-host-names

# local-host-names - include all aliases for your machine here.

ltest.com


test.com就是你想要填的~~~
(4)重建sendmail.cf

sendmail.cf是sendmail的配置文件,通過修改sendmail.mc文件進行修改,


DaemonPortsOptions=Port=smtp,Addr=127.0.0.1, Name=MTA 更改為:

DaemonPortsOptions=Port=smtp,Addr=yourip或者0.0.0.0, Name=MTA

或者把這一行用dnl註釋掉(就是在這一行前面加入dnl 然後空格 dnl的意思,按照linux系統管理手冊的解釋就是delete to next lin的意思 有位仁兄解釋為 do not load 看上去也正確,倒是是那個意思我就不管了,明白意思就好了)


然後m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf(重建sendmail.cf或者可以先備份,各人喜歡~~)

(5)修改用戶認證

還是上面那個文件vi /etc/mail/sendmail.mc 進入到裡面以後找到
48行 dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
49行 dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
#?h掉上面?尚星懊嫻 dnl
#注意:TRUST_AUTH_METH、define 前面不要留有空格

112行 dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

#前面加上 dnl, 把?行?解起?恚?nl = do not load)

#或改成下面??右部梢?br />
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

註:上面修改用戶認證這一段是引用我轉載的一篇文章的:

(6)修改埠

  dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

  去掉行首的註釋符,並且將內容修改成Port=25:

  DAEMON_OPTIONS(`Port=25, Name=MSA')dnl

  在smtp的默認埠(25)上進行認證,而不是587埠。這樣就強制所有使用該郵件伺服器(就是我們現在架設的這個伺服器)進行郵件轉發的用戶在認證后才能發郵件了。


再次運行m4程序 

 # m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

  用m4重新生成sendmail.cf文件

(7)添加郵件用戶

建立用戶帳號

[root@localhost named]# groupadd mailuser

[root@localhost named]# adduser -g mailuser -s /sbin/nologin mike

[root@localhost named]# adduser -g mailuser -s /sbin/nologin john

[root@localhost named]# passwd mike

[root@localhost named]# passwd john 密碼由你自己喜歡 用戶也隨你喜歡添加幾個(這一段引用另一篇轉載的文章)

(8)訪問控制

5,訪問控制設置

更改/etc/mail/accesss文件,增加:

[root@localhost named]# cat /etc/mail/access

# Check the /usr/share/doc/sendmail/README.cf file for a description

# of the format of this file. (search for access_db in that file)

# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc

# package.

#

# by default we allow relaying from localhost...

localhost.localdomain RELAY

localhost RELAY

127.0.0.1 RELAY

ltest.com RELAY(這個就是你自己填到local-host-names裡面的名字,一定要寫[其實我也不肯定,不過我是寫了 因為我最近時間比較緊迫,沒有進行驗證,希望看了的朋友幫忙驗證一下])

完成後makemap hash /etc/mail/access.db < /etc/mail/access進行資料庫更新。

(9)重啟服務
[root@localhost named]# service sendmail restart
看到
關閉 sm-client: [確定]
關閉 sendmail: [確定]
啟動 sendmail: [確定]
啟動 sm-client: [確定]
就正確了(後面兩個是確定就可以了,因為如果服務還沒有啟動 的華 關閉服務會事失敗的)
(10)測試伺服器

[root@localhost named]# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 localhost.localdomain ESMTP Sendmail 8.13.1/8.13.1; Sat, 17 Mar 2007 12:54:47 +0800

ehlo localhost(用戶輸入)

250-localhost.localdomain Hello localhost.localdomain [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ---認證應該生效

250-DELIVERBY

250 HELP

quit(用戶輸入 退出telnet)

221 2.0.0 localhost.localdomain closing connection

Connection closed by foreign host.

看見這些信息就代表成功了

然後就可以使用php的郵件類(網上很多,不好意思,沒辦法傳上來,或者有需要的話,過些時候我會把我用 的粘貼上來)在server (郵件伺服器這個變數)填上"localhost" 用戶郵箱(本伺服器[剛弄好這個])就填剛剛添加上去的用戶名+在local-host-names填上的域名就可以在收件人那裡顯示了(儘管可能是虛擬的)例如mike@test.com 密碼就是剛剛用戶的密碼(這是需要驗證的smtp郵件程序) port就是25 這樣你就可以用你剛剛架好的這台伺服器進行郵件的發送了!

希望我說得明白,如果大家有什麼不明白的話 歡迎留言或者給我些email。我自己弄這個郵件伺服器弄了一個多星期,可以說算是很失敗的了,沒辦法,我基礎不紮實,有被逼著幫人家做網站,只好這樣邊學邊摸索了,網上很多文章都有說在linux裡面架設伺服器,但是就是沒教我們怎麼用伺服器(可能他們覺得不用說吧!又或者只是我太笨了,嗚嗚嗚嗚) 為什麼有些地方我要特別提一下呢? 因為那些地方正是使用php發送郵件顯示出來的不足的地方:(1)使用mail()函數發送郵件的話,是很簡單, 問題是收件人顯示是nobody 這樣經過上面在local-host-name以及/etc/mail/accesss 裡面的設定就可以解決這個問題了!還有這樣就不用利用雅虎或者其他的伺服器做中轉站發郵件了(雖然沒問題,關於方法我有轉載,有興趣了解的歡迎瀏覽) 我為什麼一定要把自己的電腦作伺服器呢?? 呵呵 說白了 很簡單 ,就是客戶要求!沒辦法,他要怎樣就怎樣咯,就好像他要用ubutun做伺服器一樣(個人感覺不大好,不過我沒有深入了解過,知道的朋友也歡迎告訴我一聲,很樂意了解!)

[火星人 ] Fedora 6架設Sendmail郵件伺服器已經有411次圍觀

http://coctec.com/docs/linux/show-post-202352.html