前言:哈嘍,我是樹醬。文章的源頭,是因為在一次交談中,朋友提到一個需求。需要一批郵箱去做一些"事情",具體是幹啥事,留點懸念。如果手動去註冊郵箱,只需要解決接收郵件問題。不僅費力而且現在包括像@163等郵箱都還需要手機驗證。手動不行,那我們就自己"造"郵箱。一開始覺得挺複雜,畢竟作為一名前端工程師,這個“需求”已經超綱了。問題不大莫慌,看完這篇你就可以打造自己的域名郵箱了
1.前期準備
搭建郵件伺服器需要一些“基礎建設”,包括如下
- 一臺伺服器 推薦centos
- 一個域名
1.1 配置細節
郵件伺服器是通過SMTP協議進行通訊,為了讓伺服器能夠成功接收郵件,我們需要開啟25這個埠,並允許訪問25埠。同時如果你需要使用像類似foxmail這種客戶端接發收郵件,還需要支援POP3協議,需要開啟110埠。換句話說為了保證郵件服務的正常使用,需要開啟25和110這兩個埠
關於 POP3協議(Post Office Protocol 3):協議主要用於支援使用客戶端遠端管理在伺服器上的電子郵件,將電子郵件儲存到本地主機
下圖是阿里雲伺服器配置安全策略組的規則,在其中加入一條訪問規則
接下來是域名,需要配置域名解析,配置主機記錄
如下圖是域名的解析配置,主要包括幾個記錄數值
- MX類:增加 MX 記錄,型別選擇 MX記錄,值可以填寫主機名,也可以填寫你的公網ip地址也可以是mail.example.com。如果配置的是域名,還需要新增一條A型別的記錄,主機記錄定義為:mail,具體看下圖
- A類:該配置主要用來支援客戶端接收郵件(比如:foxmail)分別新增smtp、imap、pop等配置,記錄值為 ip
配置完如下圖所示,可以在列表中看到配置好的,
2 伺服器安裝
2.1 Postfix
關於 postfix:Postfix 是實現 SMTP 協議的軟體,也叫做郵件傳送伺服器,負責對郵件進行轉發,具體的轉發規則,就需要我們對postfix的配置進行修改
我使用的是阿里雲的伺服器,首先我們安裝郵件服務`postfix'
- 安裝
yum install postfix // 伺服器安裝
- 配置
安裝成功之後,修改配置,通過vi /etc/postfix/main.cf
命令列修改以下配置
myhostname = email.example.com // 設定系統的主機名
mydomain = example.com // 設定域名(我們將讓此處設定將成為E-mail地址“@”後面的部分)
myorigin = $mydomain // 將發信地址“@”後面的部分設定為域名(非系統主機名)
inet_interfaces = all // 接受來自所有網路的請求
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain // 指定發給本地郵件的域名
home_mailbox = Maildir/ // 指定使用者郵箱目錄
# 規定郵件最大尺寸為10M
message_size_limit = 10485760
# 規定收件箱最大容量為1G
mailbox_size_limit = 1073741824
# SMTP認證
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
下圖是postfix中主要的引數
- 啟動
配置完postfix的,啟動服務
postfix check // 檢查配置檔案是否正確
systemctl start postfix //開啟postfix服務
systemctl enable postfix //設定postfix服務開機啟動
完成postfix的配置,接下來我們還需要安裝dovecot
2.2 Dovecot
關於 Dovecot:是一款能夠為Linux系統提供IMAP和POP3電子郵件服務的開源服務程式,安全性極高,配置簡單,執行速度快,而且佔用的伺服器硬體資源也較少。上文提到POP3/IMAP是從郵件伺服器中讀取郵件時使用的協議
- 安裝
yum install dovecot // 伺服器安裝
- 配置
安裝成功之後,修改配置,通過vi /etc/dovecot/dovecot.conf
命令列修改以下配置
protocols = imap pop3 lmtp listen = *,
#新新增以下配置 #
!include conf.d/10-auth.conf
ssl = no
disable_plaintext_auth = no
mail_location = maildir:~/Maildir
- 啟動
systemctl start dovecot //開啟dovecot服務
systemctl enable dovecot //置dovecot服務開機啟動
完成以上兩個服務的配置,你離成功就近一步了!
啊樂同學:postfix與dovecot這兩個其實有什麼區別?
答:postfix主要做傳送郵件使用,而dovecot主要做接收使用,兩者結合才能完成一個完整的郵件服務
3 新建使用者
搭建完郵件伺服器之後,我們需要建立使用者來完成 郵件的接收和傳送
- 如何建立使用者
useradd tree/ 新增使用者
passwd tree // 設定使用者密碼
啊樂同學:如果這樣我建立100個郵箱使用者,豈不是很浪費時間?
莫慌,我們寫個shell指令碼,批量建立就可以解決你這個問題
建立一個檔案,createUser.sh
內容如下
/bash
#user.txt 為需要建立的使用者的檔案passwd.txt為隨機生成密碼
USER_FILE=user.txt
pass_FILE=passwd.txt
for user in `cat user.txt`
do
id $user &> /dev/null #檢視使用者是否存在
if [ $? -eq 0 ]
then
echo "The $user already exist"
else
useradd $user #建立使用者
if [ $? -eq 0 ]
then
echo "$user create sucessful"
PASSWD=$(echo $RANDOM |md5sum |cut -c 1-8) #隨機生成數字
echo $PASSWD |passwd --stdin $user &>/dev/null #修改使用者密碼
echo -e "$user\'$PASSWD'\'$(date +%Y%m%d)'" >> $pass_FILE #將使用者,密碼,日期輸入到檔案中
fi
fi
done
前提需要建立一個user.txt 來維護我們要建立的使用者,比如
tree
shujiang
指令碼會根據我們列出的使用者名稱去批量生成使用者
4.測試郵箱
搭建好服務以及完成使用者的建立,接下來就是測試郵件是否正常接收環節了
我使用的是foxmail來做驗證
這個使用者名稱就是我們上一節建立的使用者名稱稱,完成建立之後,我們通過傳送郵件來測試是否能夠成功接收
還有一種方式就是藉助telnet去做測試,這裡不做大篇幅介紹。最原始的方式
阿樂同學:如果我每個新建的郵箱使用者,我都得去配置一個客戶端去接收郵寄,豈不是很費勁,有沒有其他方式?
有的,換個角度思考,你可以通過配置郵件轉發,將所有郵件接收都轉發到某一個使用者的郵箱中去,你就可以只在該郵箱查閱郵件(我開始懷疑你的動機,是不是搞什麼批量註冊!)
具體如下,需要配置下第二節中提到的postfix配置檔案,在檔案最後新增
virtual_alias_domains = ensbook.com mail.ensbook.com
virtual_alias_maps = hash:/etc/postfix/virtual
完成配置之後,我查閱網上一些資料,需要配置/etc/postfix/virtual
檔案,該檔案主要用來管理電子郵件轉發規則的
於是我嘗試修改/etc/postfix/virtual檔案,並新增一下資訊
這條規則的含義是:所有郵件傳送至 @ensbook.com 轉發到 qq郵箱
發現竟然沒有生效,最後是建立一個virtual
的使用者實現轉發接收的。如果你看得出問題,記得在評論區告訴我
阿樂同學:我接收不到郵箱,又不知道什麼問題,如何排查?
你可以通過tail -n /var/log/maillog
檢視郵件日誌
最後
通過上文的瞭解,我們不難看到,一個域名郵件伺服器的建立其實很簡單,而且技術很老。但是無論老不老,能夠解決我們的需求就好。如果你有其他方式實現,歡迎在評論區留言。