如何在Ubuntu環(huán)境下搭建郵件服務(wù)器(二)
本教程的第 2 部分將介紹如何使用 Dovecot 將郵件從 Postfix 服務(wù)器移動到用戶的收件箱。
在***部分中,我們安裝并測試了 Postfix SMTP 服務(wù)器。Postfix 或任何 SMTP 服務(wù)器都不是一個完整的郵件服務(wù)器,因為它所做的只是在 SMTP 服務(wù)器之間移動郵件。我們需要 Dovecot 將郵件從 Postfix 服務(wù)器移動到用戶的收件箱中。
Dovecot 支持兩種標(biāo)準(zhǔn)郵件協(xié)議:IMAP(Internet 郵件訪問協(xié)議)和 POP3(郵局協(xié)議)。 IMAP 服務(wù)器會在服務(wù)器上保留所有郵件。您的用戶可以選擇將郵件下載到計算機或僅在服務(wù)器上訪問它們。 IMAP 對于有多臺機器的用戶是方便的。但對你而言需要更多的工作,因為你必須確保你的服務(wù)器始終可用,而且 IMAP 服務(wù)器需要大量的存儲和內(nèi)存。
POP3 是較舊的協(xié)議。POP3 服務(wù)器可以比 IMAP 服務(wù)器服務(wù)更多的用戶,因為郵件會下載到用戶的計算機。大多數(shù)郵件客戶端可以選擇在服務(wù)器上保留一定天數(shù)的郵件,因此 POP3 的行為有點像 IMAP。但它又不是 IMAP,當(dāng)你像 IMAP 那樣(在多臺計算機上使用它時)那么常常會下載多次或意外刪除。
安裝 Dovecot
啟動你的 Ubuntu 系統(tǒng)并安裝 Dovecot:
- $ sudo apt-get install dovecot-imapd dovecot-pop3d
它會安裝可用的配置,并在完成后自動啟動,你可以用 ps ax | grep dovecot 確認:
- $ ps ax | grep dovecot
- 15988 ? Ss 0:00 /usr/sbin/dovecot
- 15990 ? S 0:00 dovecot/anvil
- 15991 ? S 0:00 dovecot/log
打開你的 Postfix 配置文件 /etc/postfix/main.cf,確保配置了maildir 而不是 mbox 的郵件存儲方式,mbox 是給每個用戶一個單一大文件,而 maildir 是每條消息都存儲為一個文件。大量的小文件比一個龐大的文件更穩(wěn)定且易于管理。添加如下兩行,第二行告訴 Postfix 你需要 maildir 格式,并且在每個用戶的家目錄下創(chuàng)建一個 .Mail 目錄。你可以取任何名字,不一定要是 .Mail:
- mail_spool_directory = /var/mail
- home_mailbox = .Mail/
現(xiàn)在調(diào)整你的 Dovecot 配置。首先把原始的 dovecot.conf 文件重命名放到一邊,因為它會調(diào)用存放在 conf.d 中的文件,在你剛剛開始學(xué)習(xí)時把配置放一起更簡單些:
- $ sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot-oldconf
現(xiàn)在創(chuàng)建一個新的 /etc/dovecot/dovecot.conf:
- disable_plaintext_auth = no
- mail_location = maildir:~/.Mail
- namespace inbox {
- inbox = yes
- mailbox Drafts {
- special_use = \Drafts
- }
- mailbox Sent {
- special_use = \Sent
- }
- mailbox Trash {
- special_use = \Trash
- }
- }
- passdb {
- driver = pam
- }
- protocols = " imap pop3"
- ssl = no
- userdb {
- driver = passwd
- }
注意 mail_location = maildir 必須和 main.cf 中的 home_mailbox 參數(shù)匹配。保存你的更改并重新加載 Postfix 和 Dovecot 配置:
- $ sudo postfix reload
- $ sudo dovecot reload
快速導(dǎo)出配置
使用下面的命令來快速查看你的 Postfix 和 Dovecot 配置:
- $ postconf -n
- $ doveconf -n
測試 Dovecot
現(xiàn)在再次啟動 telnet,并且給自己發(fā)送一條測試消息。粗體顯示的是你輸入的命令。studio 是我服務(wù)器的主機名,因此你必須用自己的:
- $ telnet studio 25
- Trying 127.0.1.1...
- Connected to studio.
- Escape character is '^]'.
- 220 studio.router ESMTP Postfix (Ubuntu)
- EHLO studio
- 250-studio.router
- 250-PIPELINING
- 250-SIZE 10240000
- 250-VRFY
- 250-ETRN
- 250-STARTTLS
- 250-ENHANCEDSTATUSCODES
- 250-8BITMIME
- 250-DSN
- 250 SMTPUTF8
- mail from: tester@test.net
- 250 2.1.0 Ok
- rcpt to: carla@studio
- 250 2.1.5 Ok
- data
- 354 End data with .Date: November 25, 2016
- From: tester
- Message-ID: first-test
- Subject: mail server test
- Hi carla,
- Are you reading this? Let me know if you didn't get this.
- .
- 250 2.0.0 Ok: queued as 0C261A1F0F
- quit
- 221 2.0.0 Bye
- Connection closed by foreign host.
現(xiàn)在請求 Dovecot 來取回你的新消息,使用你的 Linux 用戶名和密碼登錄:
- $ telnet studio 110
- Trying 127.0.0.1...
- Connected to studio.
- Escape character is '^]'.
- +OK Dovecot ready.
- user carla
- +OK
- pass password
- +OK Logged in.
- stat
- +OK 2 809
- list
- +OK 2 messages:
- 1 383
- 2 426
- .
- retr 2
- +OK 426 octets
- Return-Path: <tester@test.net>
- X-Original-To: carla@studio
- Delivered-To: carla@studio
- Received: from studio (localhost [127.0.0.1])
- by studio.router (Postfix) with ESMTP id 0C261A1F0F
- for <carla@studio>; Wed, 30 Nov 2016 17:18:57 -0800 (PST)
- Date: November 25, 2016
- From: tester@studio.router
- Message-ID: first-test
- Subject: mail server test
- Hi carla,
- Are you reading this? Let me know if you didn't get this.
- .
- quit
- +OK Logging out.
- Connection closed by foreign host.
花一點時間比較***個例子中輸入的消息和第二個例子中接收的消息。 返回地址和日期是很容易偽造的,但 Postfix 不會被愚弄。大多數(shù)郵件客戶端默認顯示一個最小的標(biāo)頭集,但是你需要讀取完整的標(biāo)頭才能查看真實的回溯。
你也可以在你的 ~/Mail/cur 目錄中查看你的郵件,它們是普通文本,我已經(jīng)有兩封測試郵件:
- $ ls .Mail/cur/
- 1480540325.V806I28e0229M351743.studio:2,S
- 1480555224.V806I28e000eM41463.studio:2,S
測試 IMAP
我們 Dovecot 同時啟用了 POP3 和 IMAP 服務(wù),因此讓我們使用 telnet 測試 IMAP。
- $ telnet studio imap2
- Trying 127.0.1.1...
- Connected to studio.
- Escape character is '^]'.
- * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS
- ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.
- A1 LOGIN carla password
- A1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS
- ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS
- THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT
- CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE
- QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS
- BINARY MOVE SPECIAL-USE] Logged in
- A2 LIST "" "*"
- * LIST (\HasNoChildren) "." INBOX
- A2 OK List completed (0.000 + 0.000 secs).
- A3 EXAMINE INBOX
- * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
- * OK [PERMANENTFLAGS ()] Read-only mailbox.
- * 2 EXISTS
- * 0 RECENT
- * OK [UIDVALIDITY 1480539462] UIDs valid
- * OK [UIDNEXT 3] Predicted next UID
- * OK [HIGHESTMODSEQ 1] Highest
- A3 OK [READ-ONLY] Examine completed (0.000 + 0.000 secs).
- A4 logout
- * BYE Logging out
- A4 OK Logout completed.
- Connection closed by foreign host
Thunderbird 郵件客戶端
圖 1 中的屏幕截圖顯示了我局域網(wǎng)上另一臺主機上的圖形郵件客戶端中的郵件。
圖 1: Thunderbird mail
此時,你已有一個可以工作的 IMAP 和 POP3 郵件服務(wù)器,并且你也知道該如何測試你的服務(wù)器。你的用戶可以在他們設(shè)置郵件客戶端時選擇要使用的協(xié)議。如果您只想支持一個郵件協(xié)議,那么只需要在您的 Dovecot 配置中留下你要的協(xié)議名字。
然而,這還遠遠沒有完成。這是一個非常簡單、沒有加密的、大門敞開的安裝。它也只適用于與郵件服務(wù)器在同一系統(tǒng)上的用戶。這是不可擴展的,并具有一些安全風(fēng)險,例如沒有密碼保護。 我們會在下篇了解如何創(chuàng)建與系統(tǒng)用戶分開的郵件用戶,以及如何添加加密。