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

一前言

原本使用qq郵箱發送郵件,而後藉助sendEmail來發送郵件告警,可是有天天的200封限制,非常不爽,因而想到來本身搭建郵件服務器來解決這個問題,關於使用sendEmail來藉助qq郵箱來發送郵件詳見http://www.cnblogs.com/Dicky-Zhang/p/5982973.html,在作這個以前,在網上查找了不少資料,發現非常混亂,不成一體,拼拼湊湊,根本沒法使用,因此記錄下來,方便後來人使用。php

在作postfix以前,我成功搭建了iredmail,一個強大的開源系統。稍後會另一篇文章來寫下過程,供你們參考。html

說明下

關於阿里雲作郵件系統的問題,阿里雲對25端口作了限制,即便你作好了,在第三方服務器上可能都沒法使用,在本機上我作好了,都沒法使用。對於青雲系統,默認是沒有對外開放25端口,這裏的對外開放不是服務器裏面,你須要在後臺去開放25端口,否則你在外部服務器去鏈接這臺作好的服務器的時候會提示超時,對於國外的服務器我卻是沒測試,我認爲應該不會作限制。好了,很少說了,開始正題linux

解釋幾個名詞

  • 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。

通常發郵件的步驟流程是: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目的很明確:服務器

  • 用於php開發的web環境下新用戶註冊時發送驗證碼郵件---php下經過phpmailer類庫的smtp協議連接postfix來發送郵件。
  • web環境與postfix在同一臺CentOs6.5(64位)系統下,postfix不對外提供smtp亦不轉發外部MUA郵件,僅轉發(或發送)web環境下(MUA)的郵件,也就是僅轉發本機(或者說本域)郵件。同時也不接收其餘MTA的郵件(也就是說不接受他人發過來的郵件)。
  • 本文就不介紹postfix、sasldb二、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郵箱

而後

這樣的話咱們就能夠時時刻刻收到咱們的郵件啦

 參考連接:

相關文章
相關標籤/搜索