CentOS6.5_64位系統下安裝配置postfix郵件系統 啟用並配置SMTP在第三方上邊使用發送郵件


一前言

本來使用qq郵箱發送郵件,然后借助sendEmail來發送郵件告警,但是有每天的200封限制,很是不爽,於是想到來自己搭建郵件服務器來解決這個問題,關於使用sendEmail來借助qq郵箱來發送郵件詳見http://www.cnblogs.com/Dicky-Zhang/p/5982973.html,在做這個之前,在網上查找了很多資料,發現很是混亂,不成一體,拼拼湊湊,根本無法使用,所以記錄下來,方便后來人使用。

在做postfix之前,我成功搭建了iredmail,一個強大的開源系統。稍后會另外一篇文章來寫下過程,供大家參考。

說明下

關於阿里雲做郵件系統的問題,阿里雲對25端口做了限制,即使你做好了,在第三方服務器上可能都無法使用,在本機上我做好了,都無法使用。對於青雲系統,默認是沒有對外開放25端口,這里的對外開放不是服務器里面,你需要在后台去開放25端口,不然你在外部服務器去連接這台做好的服務器的時候會提示超時,對於國外的服務器我倒是沒測試,我認為應該不會做限制。好了,不多說了,開始正題

解釋幾個名詞

  • MUA:用戶代理端,即用戶使用的寫信、收信客戶端軟件。比如:outlook、foxmail等客戶端軟件,乃至通過瀏覽器登錄郵箱並發送郵件的BS架構網頁也算是MUA。
  • MTA:郵件傳送端,即常說的郵件服務器,用於轉發、收取用戶郵件。本文之中的postfix實現的就是MTA,當然postfix也是一種特殊的MUA,不再深入介紹,本文之中僅把postfix當做MTA使用。
  • MDA:郵件代理端,相當於MUA和MTA的中間人,可用於過濾垃圾郵件。
  • POP:郵局協議,當前是第三版,也就是POP3,用於MUA連接服務器收取用戶郵件,通信端口110。
  • IMAP:互聯網應用協議,功能與POP類似:也用於MUA連接服務器收取用戶郵件;功能較POP多,通信端口143。
  • SMTP:簡單郵件傳送協議,MUA連接MTA或MTA連接MTA發送郵件使用此協議,通信端口25,啟用ssl/tls的情況下端口為465或587。

一般發郵件的步驟流程是:

1、MUA通過POP、IMAP或SMTP協議連接MTA(稱之為mta1);本文之中php通過phpmailer請求發送郵件的php腳本就扮演了MUA的角色,而postfix就是MTA;

2、MUA發送郵件給mta1(或者說MUA通過mta1發送郵件);本文中postfix就是這個mta1;

3、mta1與其他的MTA自主溝通連接將郵件傳送至指定域下的指定用戶(此時mta1就扮演了MUA的角色功能,這種交互是由郵件系統軟件自主實現,與用戶端無關)。

本次搭建postfix目的很明確:

  • 用於php開發的web環境下新用戶注冊時發送驗證碼郵件---php下通過phpmailer類庫的smtp協議鏈接postfix來發送郵件。
  • web環境與postfix在同一台CentOs6.5(64位)系統下,postfix不對外提供smtp亦不轉發外部MUA郵件,僅轉發(或發送)web環境下(MUA)的郵件,也就是僅轉發本機(或者說本域)郵件。同時也不接收其他MTA的郵件(也就是說不接受他人發過來的郵件)。
  • 本文就不介紹postfix、sasldb2、saslauthd等軟件了,網上一大把

 二 postfix的安裝

1 yum remove sendmail #卸載sendmail
2 yum remmove postfix #卸載postfix
3 yum install postfix #重新安裝postfix
4 #yum安裝會自動建立postfix用戶組和用戶名
5 yum install crontabs #因為卸載postfix的時候系統定時服務也被卸載 核心服務 也同步安裝

使用sasldb、saslauthd來生成smtp虛擬賬號

安裝

 1 yum install cyrus-sasl*  #提供smtp的虛擬賬戶和密碼服務
 2 #sasldb2包含在saslauthd當中 就不要再問為什么沒有安裝sasldb2的shell代碼了
 3 #當前mta查看
 4 alternatives --display mta 
 5 #設置mta
 6 /usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
 7 #再次查看mta
 8 alternatives --display mta 
 9 #輸出結果最后一行會有類似如下的提示:mta即設置完畢
10 #Current `best' version is /usr/sbin/sendmail.postfix.

postfix開機啟動設置,因為采用sasldb2提供postfix的smtp賬戶和密碼,無需saslauthd服務運行,故而saslauthd服務不用啟動,使用sasldb2還減少資源占用:

 1 chkconfig postfix on 

三 postfix配置並啟用smtp

postfix配置文件在/etc/postfix目錄下,主要修改的配置文件為:/etc/postfix/main.cf,配置說明詳見代碼段

 1 vi /etc/postfix/main.cf #vi編輯postfix配置文件
 2 #找到如下配置項酌情修改
 3 ######
 4 myhostname =  mail.xxx.com.cn  
 5 #postfix主機名,修改成你的域名 此項需要添加A記錄並指向postfix所在主機公網IP
 6 mydomain   =  xxx.com.cn  
 7 #域名
 8 myorigin   =  $mydomain 
 9 #本機postfix的郵箱域名后最 此項默認值使用myhostname
10 #此處使用了前項mydomain 也就是說本機postfix郵箱后綴為:@xxx.com.cn
11 inet_interfaces = all 
12 #指定postfix系統監聽的網絡接口 此處必須是localhost或127.0.0.1或內網ip
13 #若注釋或填入公網ip  服務器的25端口將對公網開放
14 #默認值為all 即監聽所有網絡接口
15 #此項指定localhost后 本機postfix就只能發郵件不能接收郵件
16 inet_protocols = ipv4
17 #網絡協議 ipv6在國內還不怎么普及 這里ipv4即可
18 mydestination = $myhostname, localhost.$mydomain, localhost
19 #指定postfix接收郵件時收件人的域名,換句話說,也就是你的postfix系統要接收什么樣的郵件。
20 #此項配置中$myhostname表示postfix接受@$myhostname為后綴的郵箱的郵件 逗號分割支持指多項
21 #此項默認值使用myhostname
22 local_recipient_maps =
23 #此項制定接收郵件的規則 可以是hash文件 此項對本次配置無意義 可以直接注釋
24 mynetworks = x.x.x.x
25 #指定你所在的網絡的網絡地址
26 #最好加上你要在第三方上使用的服務器,不加的話可能無法使用在第三方上面
27 #請依據實際情況修改
28 smtpd_banner = JJonline.Cn ESMTP Server
29 #指定MUA通過smtp連接postfix時返回的header頭信息
30 #原始配置附帶有postfix版本號 去掉即可,此項酌情處理
31 #SMTP Config
32 broken_sasl_auth_clients = yes
33 #指定postfix兼容MUA使用不規則的smtp協議--主要針對老版本的outlook  此項對於本次配置無意義
34 smtpd_client_restrictions = permit_sasl_authenticated
35 #指定可以向postfix發起SMTP連接的客戶端的主機名或ip地址
36 #此處permit_sasl_authenticated意思是允許通過sasl認證(也就是smtp鏈接時通過了賬號、密碼效驗的用戶)的所有用戶
37 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
38 #發件人在執行RCPT TO命令時提供的地址進行限制規則  此處照搬復制即可
39 smtpd_sasl_auth_enable = yes
40 #指定postfix使用sasl驗證 通俗的將就是啟用smtp並要求進行賬號、密碼效驗
41 smtpd_sasl_local_domain = $mydomain
42 #指定SMTP認證的本地域名  本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注釋掉 默認為空
43 smtpd_sasl_security_options = noanonymous
44 #取消smtp的匿名登錄  此項默認值為noanonymous smtp若能匿名登錄危害非常大 此項請務必指定為noanonymous
45 message_size_limit = 5242880
46 #指定通過postfix發送郵件的體積大小 此處表示5M
47 ######

查看postfix配置文件的所有配置項:

1 postconf #不帶任何命令參數 即可輸出所有postfix配置項以及默認值

postconf #不帶任何命令參數 即可輸出所有postfix配置項以及默認值

四sasldb2建立smtp用戶和密碼

某種意義上來講:smtp的賬戶密碼建立也就是建立郵箱賬戶

#配置postfix啟用sasldb2作為smtp的賬號秘密效驗方式
#編輯通過sasl啟用smtp賬號密碼效驗的配置
vi /etc/sasl2/smtpd.conf #vi寫入或編輯內容如下:
#####
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login CRAM-MD5 DIGEST-MD5
#####
#這里需要注意的是:這個配置文件的位置是64位機器上的,32位機器應該在:/usr/lib/sasl2/smtpd.conf
 
#創建smtp賬號
saslpasswd2 -c -u `postconf -h mydomain` test #回車會要求輸入密碼,連續兩次
#表示創建test@$mydomain的郵箱賬號(也是smtp的賬號)和密碼
#本例就是創建test@xxx.com.cn賬號和密碼
#此處注意的是smtp登錄用的賬號並不是單純的用戶名  而是整個郵箱地址字符串
#假設此處設置的smtp賬號test@xxx.com.cn密碼為test123  下方測試時要用到
 
#查看sasldb2的用戶和密碼
sasldblistusers2
#此命令進用戶查看sasldb的用戶情況
#此命令回車后會輸出諸如這樣的內容:test@xxx.com.cn: userPassword
 
#每次添加smtp用戶完畢之后需重啟postfix或reload

測試postfix配置文件並啟動postfix

1 #測試postfix配置文件
2 service postfix check
3 #沒有問題的話會返回着色[ok]字樣
4 #啟動postfix
5 service postfix start
6 #設置postfix開機啟動
7 chkconfig postfix on
8 #更改sasldb2數據的權限,讓postfix可以讀取
9 chmod 755 /etc/sasldb2
View Code

五 測試smtp

直接本機telnet,上述添加的test@xxx.com.cn賬號和test123密碼需要base64編碼,編碼后的字符串為:

執行編碼語句:

用戶名:perl -e 'use MIME::Base64; print encode_base64("test")'

dGVzdA==

密碼:perl -e 'use MIME::Base64; print encode_base64("test123")'

dGVzdDEyMw==

telnet測試:

在本機上測試:

telnet  localhost  25

 1 #若沒安裝telnet 需安裝telnet 
 2 yum install telnet
 3  
 4 #telnet測試smtp連接postfix
 5 telnet 127.0.0.1 25 #回車后會顯示由$smtpd_banner配置的歡迎信息
 6 EHLO jjonline  #輸入ehlo消息頭進行握手 消息返回后繼續
 7 AUTH LOGIN  #要求進行smtp賬號密碼效驗  
 8 返回后輸入test的base64編碼,是test而不是test@xxx.com.cn
 9  #返回后輸入test123密碼的編碼 也是base64編碼
10  #回車后就會顯示smtp效驗成功  接下來還可以測試發送郵件功能 本文就不再做示例了
11  
12 #注意  要退出telnet 輸入quit回車即可

自此,自建postfix並啟用smtp和smtp的虛擬賬號完成、

說明一點:

想在第三方上邊使用的話,你可以先測試下在第三方服務器上面,還是telent mail.xx.com(你的郵件服務器),和上邊基本一樣,如果測試通過,基本就可以在第三方使用了。如果配置都正確,但是測試有問題,telnet超時,這時候請你聯系你的空間商,讓他放行25端口。

六 域名解析記錄設置

postfix配置完畢,想要通過這台postfis郵件服務器發送的郵件被其他郵箱服務商所接受,還需要做A記錄、txt記錄還mx記錄,請適配你自己的域名和ip地址

 七在第三方服務器上面使用

1,使用sendEmail來發送郵件

用法詳見:http://www.cnblogs.com/Dicky-Zhang/p/5982973.html

我簡單說點:

和使用qq的有點不一樣,在這里是直接輸入用戶名和密碼,不是編碼后的用戶名和密碼

2,使用mail或者mailx來來調用郵件服務器發送郵件

需要安裝postmail或者sendmail服務,安裝方法比較簡單,yum就可以了

一些配置如下:

打開配置文件 vim /etc/mail.rc
在最后邊添加指定
set from=xxx@xxx.com  (發件人)
set smtp=mail.xxx.com  (郵件服務器)
set smtp-auth-user="xxxx"  (用戶名)
set smtp-auth-password="123456"(密碼)
set smtp-auth=login

用戶名密碼不需要編碼
保存重啟服務  

下面就是測試了,關於mail,mailx用法,點這里http://www.cnblogs.com/Dicky-Zhang/p/6085212.html

八關於白名單問題

我是習慣網qq郵箱里面發郵件,所以要注意設置白名單,自建郵件服務器很可能被當做垃圾郵件,被放到垃圾郵箱了,所以我們需要設置白名單

打開qq郵箱

然后

這樣的話我們就可以時時刻刻收到我們的郵件啦

 參考鏈接:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM