原本使用qq郵箱發送郵件,而後藉助sendEmail來發送郵件告警,可是有天天的200封限制,非常不爽,因而想到來本身搭建郵件服務器來解決這個問題,關於使用sendEmail來藉助qq郵箱來發送郵件詳見http://www.cnblogs.com/Dicky-Zhang/p/5982973.html,在作這個以前,在網上查找了不少資料,發現非常混亂,不成一體,拼拼湊湊,根本沒法使用,因此記錄下來,方便後來人使用。php
在作postfix以前,我成功搭建了iredmail,一個強大的開源系統。稍後會另一篇文章來寫下過程,供你們參考。html
關於阿里雲作郵件系統的問題,阿里雲對25端口作了限制,即便你作好了,在第三方服務器上可能都沒法使用,在本機上我作好了,都沒法使用。對於青雲系統,默認是沒有對外開放25端口,這裏的對外開放不是服務器裏面,你須要在後臺去開放25端口,否則你在外部服務器去鏈接這臺作好的服務器的時候會提示超時,對於國外的服務器我卻是沒測試,我認爲應該不會作限制。好了,很少說了,開始正題linux
通常發郵件的步驟流程是:web
一、MUA經過POP、IMAP或SMTP協議鏈接MTA(稱之爲mta1);本文之中php經過phpmailer請求發送郵件的php腳本就扮演了MUA的角色,而postfix就是MTA;shell
二、MUA發送郵件給mta1(或者說MUA經過mta1發送郵件);本文中postfix就是這個mta1;vim
三、mta1與其餘的MTA自主溝通鏈接將郵件傳送至指定域下的指定用戶(此時mta1就扮演了MUA的角色功能,這種交互是由郵件系統軟件自主實現,與用戶端無關)。瀏覽器
本次搭建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配置文件在/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配置項以及默認值
某種意義上來說: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
直接本機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郵箱
而後
這樣的話咱們就能夠時時刻刻收到咱們的郵件啦
參考連接: