郵件服務器搭建
前言
本篇參考
https://blog.51cto.com/5001660/2377785
一個電子郵件系統應具有的三個主要組成構件,這就是用戶代理、郵件服務器 ,以及郵件發送協議(如SMTP)和郵件讀取協議(如POP3)。POP3是郵局協議 (Post Office Protocol)版本3

用戶代理 UA(User Agent)就是用戶與電子郵件系統的接口,在大多數情況下它就是運行在用戶電腦中的一個程序。因此用戶代理又稱為電子郵件客戶端軟件 。用戶代理向用戶提供一個很友好的接口(目前主要是窗口界面)來發送和接收郵件。現在可供大家選擇的用戶代理有很多種。例如,微軟公司的Outlook Express和我國張小龍制作的Foxmail,都是很受歡迎的電子郵件用戶代理。
郵件傳輸過程
➊發件人調用計算機中的用戶代理撰寫和編輯要發送的郵件。
➋ 發件人點擊屏幕上的“發送郵件”按鈕,把發送郵件的工作全都交給用戶代理來完成。用戶代理把郵件用SMTP協議發給發送方郵件服務器,用戶代理充當SMTP客戶,而發送方郵件服務器充當SMTP服務器。用戶代理所進行的這些工作,用戶是看不到的。有的用戶代理可以讓用戶在屏幕上看見郵件發送的進度顯示。用戶所使用的郵件服務器究竟在什么地方,用戶並不知道,也不必要知道。實際上,用戶在把寫好的信件交付給用戶代理后,就什么都不用管了。
➌ SMTP服務器收到用戶代理發來的郵件后,就把郵件臨時存放在郵件緩存隊列中,等待發送到接收方的郵件服務器(等待時間的長短取決於郵件服務器的處理能力和隊列中待發送的信件的數量。但這種等待時間一般都遠遠大於分組在路由器中等待轉發的排隊時間)。
➍ 發送方郵件服務器的SMTP客戶與接收方郵件服務器的SMTP服務器建立TCP連接,然后就把郵件緩存隊列中的郵件依次發送出去。郵件不會在互聯網中的某個中間郵件服務器落地 。如果SMTP客戶還有一些郵件要發送到同一個郵件服務器,那么可以在原來已建立的TCP連接上重復發送。如果SMTP客戶無法和SMTP服務器建立TCP連接(例如,接收方服務器過負荷或出了故障),那么要發送的郵件就會繼續保存在發送方的郵件服務器中,並在稍后一段時間再進行新的嘗試。如果SMTP客戶超過了規定的時間還不能把郵件發送出去,那么發送郵件服務器就把這種情況通知用戶代理。
➎ 運行在接收方郵件服務器中的SMTP服務器進程收到郵件后,把郵件放入收件人的用戶郵箱中,等待收件人進行讀取。
➏ 收件人在打算收信時,就運行計算機中的用戶代理,使用POP3(或IMAP)協議讀取發送給自己的郵件。
以上摘錄於《計算機網絡》
郵件服務器的搭建
centos7下使用postfix+dovecot搭建郵件服務器(防火牆關閉,SELinux關閉下)
DNS服務器搭建
yum install bind bind-utils
查看是否安裝成功
[root@localhost ~]# rpm -qa|grep bind

編輯主配置文件
[root@localhost ~]# vim /etc/named.conf


新建區域配置文件,新建的文件名要與include包含的文件名一至,且權限一至

編輯配置文件

配置正向查找區域,配置文件/var/named/named.mail.com,復制后的權限必須一至


配置反向查詢文件

開啟服務

如果報錯請檢查配置文件及權限
測試DNS
設置域名解析服務器為自己


搭建郵件服務器
配置服務器主機名稱,需要保證服務器主機名稱與發信域名保持一致

重啟生效,記得重啟域名服務及關閉防火牆
postfix
介紹:postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟件
安裝
yum install postfix
配置配置文件
vim /etc/postfix/main.cf
第83行,修改保存郵件的域名稱

第99行,修改寄出郵件的域名稱

第116、119行,修改定義的網卡監聽地址

第164行,修改定義的可接收郵件的主機名或域名列表

新建兩個用戶用於測試

dovecot
介紹:dovecot是一款能夠為Linux系統提供IMAP和POP3電子郵件服務的開源軟件程序
yum install dovecot
編輯配置文件
vim /etc/dovecot/dovecot.conf
設置dovecot服務程序支持的電子郵件協議
允許用戶使用明文進行密碼驗證

設置允許登錄的網段地址

配置郵件格式和儲存路徑
vim /etc/dovecot/conf.d/10-mail.conf

開啟服務
[root@mail ~]# systemctl start postfix
[root@mail ~]# systemctl start dovecot
可以看到郵件的存放位置,這是未發郵件前

發件測試

[root@mail mail]# telnet mail.com 25
Trying 127.0.0.1...
Connected to mail.com.
Escape character is '^]'.
220 mail.com ESMTP Postfix
helo mail.com 聲名本機
250 mail.com
mail from:user1@mail.com 聲明發件人
250 2.1.0 Ok
rcpt to:user2@mail.com 聲明收件人
250 2.1.5 Ok
data 寫正文
354 End data with <CR><LF>.<CR><LF>
user1
. 正文結束標記
250 2.0.0 Ok: queued as 12A27206C86E
quit 退出
221 2.0.0 Bye
Connection closed by foreign host.
發件后,可以看到user2已經收到郵件

看一下內容

也可以登錄查看郵件

[root@mail mail]# telnet mail.com 110
Trying 127.0.0.1...
Connected to mail.com.
Escape character is '^]'.
+OK Dovecot ready.
user user2 用戶
+OK
pass 54321 密碼
+OK Logged in.
list 列表查看郵件
+OK 1 messages:
1 380
.
retr 1 讀取編號為1的郵件
遇到的問題
1、賬號密碼正確因權限問題被拒絕
報錯
-ERR [SYS/PERM] Permission denied
Connection closed by foreign host.

解決
[root@mail mail]# chmod 0600 /var/spool/mail/*
端口介紹
SMTP 簡單郵件傳輸協議 TCP 25端口 ,加密時使用TCP 456端口
POP3 第三版郵局協議 TCP 110端口 ,加密時使用955端口
IMAP4 第四版互聯網消息訪問協議 TCP 143端口 , 加密時使用993端口
防火牆開啟情況下允許端口通過
firewall-cmd -add-port 25/tcp --permanent
firewall-cmd -add-port 465/tcp --permanent
firewall-cmd -add-port 110/tcp --permanen
firewall-cmd -add-port 995/tcp --permanent
firewall-cmd -add-port 143/tcp --permanent
firewall-cmd -add-port 993/tcp --permanent
firewall-cmd --reload 重啟防火牆
SMTP相關命令
helo
客戶端為標識自己的身份而發送的命令(通常帶域名)
mail from
標識郵件的發件人;以 mail from: 的形式使用
rcpt to
標識郵件的收件人;以 rcpt to: 的形式使用
data
客戶端發送的,用於啟動郵件內容傳輸的命令
turn
允許客戶端和服務器交換角色,並在相反的方向發送郵件,而不必建立新的連接
