Stalwart 郵件伺服器架設指南:取代 Postfix 與 Dovecot
Stalwart 以單一 Rust 二進位檔取代傳統郵件堆疊。本文分析其架構優劣、連接埠 25 的封鎖測試,以及為何在複雜環境下 mailcow 仍是更佳選擇。
Stalwart 整合為單一二進位檔的內容
Stalwart 是一套郵件伺服器,您只需在單一 VPS 上執行一個 Rust 編譯的二進位檔即可運作。它在同一個處理程序中處理 SMTP、IMAP、POP3、JMAP、CalDAV、CardDAV 與 WebDAV 請求,並內建垃圾郵件過濾器、郵件儲存機制及 ACME 用戶端。傳統架構需結合 Postfix、Dovecot、Rspamd、帳號資料庫與獨立的憑證工具才能完成相同工作。Stalwart 以一個服務單元與位於 /etc/stalwart/config.json 的一個設定檔取代上述所有元件。
下方所有數據、設定名稱與指令均引用自 Stalwart 官方文件、發布頁面與安裝腳本,於 2026 年 8 月 28 日查閱,對應版本為 v0.16.19(發布於 2026 年 8 月 24 日)。這些指令供您在自己的伺服器上執行。每項指令後均附有驗證方式,以確認執行結果是否正確。
Stalwart 採用 GNU Affero General Public License v3.0 (AGPL-3.0) 與 Stalwart Enterprise License v2 雙重授權。部分功能僅限企業版使用。文件中的 HTTP 端點列表會以 /scim/v2/* 標示此類功能。在規劃部署涉及您尚未實際執行過的功能時,請務必先閱讀授權條款。
單一二進位檔確實減少了活動元件的數量,但這並未減少決定郵件能否送達的兩項關鍵因素。
連接埠 25 與 DNS 信譽度與您執行的軟體無關
對外 TCP 連接埠 25 是第一道關卡。許多 VPS 提供商預設會封鎖新帳號的此連接埠;若連接埠 25 被封鎖,代表您的伺服器只能與自己通訊,無法與外界聯繫。請在安裝任何軟體前先進行測試。
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 alt1.aspmx.l.google.com 25正常的測試結果會在約 1 秒內顯示 Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded!。若連接埠被封鎖,測試會掛起 5 秒後顯示 nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out,這是因為封包在上游被丟棄,且沒有任何回應重置(reset)傳回給您。若遇到此情況,請向您的提供商提交支援工單。任何郵件伺服器都無法繞過被丟棄的封包。
第二道關卡是接收端網路對您的 IP 位址與網域的評價。這包含 IP 的反向 DNS(reverse DNS)、SPF、DKIM、DMARC,以及您所處 IP 位址區段的發送歷史。Stalwart 的 DNS 設定頁面明確指出這些工作的位置:反向 DNS 記錄「通常由託管提供商設定,而非 Stalwart 本身」。此類別的其他項目亦同,它們存在於您的 DNS 區域設定與提供商的控制面板中,而非郵件伺服器內。
因此,本頁面不會重複說明這些記錄的設定方式。我們有專門的指南:SPF、DKIM 與 DMARC 的一次性設定教學。若您尚未決定是否要自行架設郵件伺服器,請先閱讀 我們對自架郵件服務是否仍具價值的誠實分析。選擇 Stalwart 並不會改變這些評估條件。
小型 VPS 執行 Stalwart 郵件伺服器的需求
根據 2026 年 8 月 28 日查閱的 Stalwart 系統需求頁面,其規格如下。閒置記憶體佔用約為 100 MB。對於 5 到 10 位使用者的小型部署,1 GB RAM 已足夠。若為約 5 位使用者的低流量環境,單核心 CPU 即可運作;該頁面並補充:「隨著併發量與活動增加,將需要更多 CPU 核心以維持低延遲與高吞吐量」。預設的併發連線上限為 8,192 個(涵蓋所有服務),此數值可自行調整。
該頁面未註明最小磁碟空間,因此請根據預期儲存的郵件量規劃磁碟大小,並預留儲存空間進行壓縮(compact)所需的緩衝空間。
必須確保三條對外連線路徑暢通,否則伺服器將出現與郵件功能無關的故障。伺服器需從 https://github.com/stalwartlabs/webui/releases/latest/ 取得網頁介面套件,並連線至 https://acme-v02.api.letsencrypt.org/directory 取得憑證。此外,伺服器需透過 UDP 與 TCP 53 埠進行 DNS 查詢,以解析 MX 與驗證記錄。若嚴格限制對外防火牆導致無法連線至上述第一個路徑,將會導致郵件伺服器雖已啟動,卻無法使用管理介面的情況。
安裝指定版本,而非「latest」
官方安裝程式為 shell script。執行前請務必閱讀內容。
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.sh於 2026 年 8 月 28 日閱讀該腳本,可確認其具體行為。它會建立 stalwart 服務帳號及其所需目錄。接著從 https://github.com/stalwartlabs/stalwart/releases/latest/download 下載檔案。二進位檔會放置於 /usr/local/bin/stalwart,權限設為 0755。設定檔存於 /etc/stalwart/config.json,資料存於 /var/lib/stalwart,日誌存於 /var/log/stalwart,這三個目錄權限均為 0750,擁有者為 stalwart。環境變數檔案寫入 /etc/stalwart/stalwart.env,權限為 0640,擁有者為 root:stalwart。該腳本接受一個選用的安裝前綴參數,以及用於 FoundationDB 建置的 --fdb 旗標。它不接受版本參數。
最後一點至關重要。該腳本永遠會抓取最新版本,導致兩台相隔一週建置的伺服器無法執行相同的程式碼。請在安裝後自行鎖定二進位檔版本,這也是 v0.16.19 發行說明中建議的升級路徑:「若您正從 v0.16.x 升級,請替換二進位檔(或執行 docker pull)。」
STALWART_TAG=v0.16.19
curl -fsSLO "https://github.com/stalwartlabs/stalwart/releases/download/${STALWART_TAG}/stalwart-x86_64-unknown-linux-gnu.tar.gz"
tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz
sudo systemctl stop stalwart
sudo install -m 0755 -o root -g root stalwart /usr/local/bin/stalwart
sudo systemctl start stalwart
systemctl is-active stalwartsystemctl is-active stalwart 應輸出 active。若輸出其他內容,請參閱 journalctl -u stalwart -n 50。每個發行版本資產皆附帶對應的 .sigstore.json 套件,因此您可在安裝前驗證下載檔案的簽章。
該腳本寫入的 unit 檔案以 User=stalwart 身分執行,並設定了 AmbientCapabilities=CAP_NET_BIND_SERVICE。此權限即為非特權帳號能綁定 25、443、465 與 993 埠的原因。若您日後自行編寫 unit 檔案卻遺漏該行,服務將無法啟動,因為一般使用者無法綁定 1024 以下的埠。
初始管理員密碼的輸出位置
Stalwart 會以引導模式(bootstrap mode)啟動,並將一組 16 字元的臨時密碼寫入服務日誌中,僅此一次。
sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'設定精靈會監聽 8080 埠的純 HTTP 請求,請勿將此埠暴露於公開網路。建議改用 SSH 通道從您的筆記型電腦進行連線:
ssh -N -L 8080:127.0.0.1:8080 you@your-vps接著開啟 http://127.0.0.1:8080/admin 並以 admin 帳號登入,密碼請使用日誌中顯示的內容。精靈將會詢問伺服器主機名稱、預設郵件網域、TLS、儲存空間、帳號目錄、日誌記錄及 DNS 處理方式。完成後請重新啟動服務,之後即可使用 https://<your-host>/admin 進行操作。
若密碼已從日誌中被洗掉,請改為設定固定密碼。/etc/stalwart/stalwart.env 檔案中已預留相關的註解項目,包含 STALWART_RECOVERY_ADMIN=admin:changeme、STALWART_RECOVERY_MODE=true 與 STALWART_RECOVERY_MODE_PORT(預設為 8080)。請取消註解、重新啟動服務、登入,完成後再將該項目重新註解。Stalwart 的安全性強化頁面建議將此憑證僅保留於緊急情況使用,且切勿使用管理員帳號登入 IMAP、JMAP 或 WebDAV。
該頁面同時列出了應保留的監聽埠:用於接收 SMTP 的 25 埠、用於隱式 TLS 提交(submission)的 465 埠、用於 IMAPS 的 993 埠,以及用於所有 HTTP 流量的 443 埠。頁面中將 587、143、4190、110、995 及 8080 視為非必要埠,並建議在設定完成後關閉 8080 埠。
使用固定標籤在 Docker 中執行
官方文件使用的映像檔為 stalwartlabs/stalwart。截至 2026 年 8 月 28 日,Docker Hub 上除了 -alpine 變體外,亦提供 v0.16.19 標籤。請鎖定修補版本(patch version),而非使用 v0.16 這類浮動標籤,理由與上述二進位檔相同。
services:
stalwart:
image: stalwartlabs/stalwart:v0.16.19
container_name: stalwart
restart: unless-stopped
ports:
- "25:25"
- "465:465"
- "993:993"
- "443:443"
- "127.0.0.1:8080:8080"
volumes:
- stalwart-etc:/etc/stalwart
- stalwart-data:/var/lib/stalwart
volumes:
stalwart-etc:
stalwart-data:該檔案是將官方文件中的 docker run 指令轉換為 Compose 格式,並移除了非必要的監聽埠,同時將設定埠綁定至 localhost。啟動服務並讀取相同的引導(bootstrap)訊息:
docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'Docker 頁面亦說明了如何使用 -e STALWART_RECOVERY_ADMIN=admin:mySecretPass 在啟動時設定固定憑證;若您偏好此方式而非讀取日誌,可使用 Compose 的 environment: 金鑰。
完整的官方連接埠列表,以及為何此檔案較精簡
Stalwart 的 Docker 頁面列出了 443、8080、25、587、465、143、993、110、995 與 4190。其強化安全頁面指出 587、143、110、995 與 4190 為非必要連接埠,並建議在設定完成後停用 8080。請僅開啟用戶端實際需要的連接埠。若手機用戶端強制要求使用 STARTTLS 提交,請開啟 587;若使用者需透過桌面用戶端編寫 Sieve 規則,請開啟 4190。
若您不熟悉 Compose,我們的 Docker Compose VPS 操作指南 涵蓋了檔案配置與此處使用的命名磁碟區(named-volume)模型。針對郵件伺服器需特別注意:Docker 會透過寫入自身的防火牆規則來發布連接埠,且這些規則的優先順序高於 ufw,因此 ufw deny 8080 無法關閉由 Compose 發布的連接埠。在連接埠映射中綁定至 127.0.0.1 才是真正關閉連接埠的方法,這也是上述檔案採取此做法的原因,且 SSH 通道依然適用。
不使用 certbot 的 TLS 及其代價
Stalwart 直接實作了 ACME (automatic certificate management environment),因此不需要 certbot,也沒有續期掛鉤 (renewal hook)。說明文件列出了四種驗證方法。HTTP-01 會在 80 埠回應挑戰請求。TLS-ALPN-01 會在 443 埠使用 ACME 專用的 ALPN 協定呈現一張特製憑證。DNS-01 透過發布臨時 TXT 記錄進行驗證,是兩種能簽發萬用字元憑證的方法之一。DNS-PERSIST-01 則使用長效的授權 TXT 記錄,而非每次續期時都寫入新的記錄。
其代價是 Stalwart 需要獨佔該埠。TLS-ALPN-01 的運作方式是自行完成 TLS 握手,因此若後方有負責 TLS termination 的反向代理,它將無法成功運作。如果該伺服器上的 nginx 或 Caddy 已經佔用了 443 埠,請將 Stalwart 改為使用 DNS-01,或是為其配置獨立的 IP 位址。
DANE 與 MTA-STS 以及您應了解的預設值
兩者皆透過網頁介面中的 Settings、MTA、Outbound、TLS Strategies,針對 MtaTlsStrategy 物件的 TLS 策略進行設定。dane 欄位預設為 optional,當收件者發布 TLSA 記錄時,系統會嘗試進行 DANE 驗證,若無則退回至一般的 STARTTLS。若設為 require,則僅在 TLSA 記錄可驗證時才會進行傳送。mtaSts 欄位的行為相同,預設值為 optional。相關的逾時設定為 tlsTimeout(預設 3 分鐘)與 mtaStsTimeout(預設 5 分鐘)。
在入站方面,Stalwart 可在 https://mta-sts.<domain>/.well-known/mta-sts.txt 發布您自己的 MTA-STS 政策,這需要開啟 443 埠。MtaSts 單例物件包含 mode(預設 testing)、maxAge(預設 7 天)以及 mxHosts(若留空,則退回至 TLS 憑證中的主機名稱)。您需要提供兩筆 DNS 記錄:指向郵件主機的 mta-sts CNAME,以及包含政策識別碼的 _mta-sts TXT 記錄。
dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txtTXT 查詢應回傳 v=STSv1; id=... 字串,而 curl 應回傳政策內容。若 curl 未回傳任何內容,則代表 443 埠已關閉,或是 mta-sts.example.org 的憑證從未簽發。
在上述兩項檢查通過前,請將 mode 保持在 testing。若在 enforce 模式下政策設定錯誤或憑證失效,將導致其他伺服器無法投遞郵件給您,且您將會從使用者端而非日誌中得知此問題。DANE 也有類似的陷阱:它要求 DNSSEC 簽署的區域,且每次 ACME 更新憑證時,必須重新發布鎖定葉憑證(leaf certificate)的 TLSA 記錄。請改為鎖定簽發的 CA,或是接受每次更新憑證的繁瑣作業。
靜態加密並非端對端加密
這是最常被誤解的功能,以下說明文件中的確切定義。每位使用者的純文字郵件在寫入磁碟前,會自動使用其 OpenPGP 或 S/MIME 憑證進行加密。encryptAtRest 預設為啟用,適用於透過 SMTP 或 LMTP 傳入的郵件,前提是收件者已註冊加密金鑰。encryptOnAppend 預設為 false,「這會讓附加的郵件保持原樣,確保用戶端能完全掌控其儲存的內容」。OpenPGP 採用 PGP/MIME 而非較舊的 PGP/Inline,並使用 AES-256 或 AES-128。Stalwart 不會產生金鑰:使用者需匯出 ASCII-armored 公開金鑰,並將其註冊為 Account 下的 PublicKey 物件(Public Keys)。
此功能可保護遭竊的磁碟映像檔、遭竊的備份,以及郵件送達後管理員讀取儲存空間的情況。若無私密金鑰,儲存的位元組將無法讀取,管理員也無法解密。
此功能無法保護傳輸中的郵件。郵件透過兩台伺服器協議的 TLS 在網際網路上傳輸,抵達時為純文字,Stalwart 隨即進行加密。寄件者、寄件者的服務供應商以及任何移除 TLS 的節點皆已看過純文字內容。
另有三項限制需明確說明。您的「寄件備份」與「草稿」資料夾是由您的用戶端寫入,屬於附加操作,且 encryptOnAppend 預設為 false,因此除非您手動更改設定,否則這些郵件將以明文儲存。我在 2026 年 8 月 28 日閱讀的文件僅描述郵件內容,並未提及信封資料、標頭或索引項目會被加密,請勿預設這些項目已加密。文件亦未說明在您上傳金鑰前已儲存的郵件會被重新加密,請假設它們不會被加密並進行檢查。全文檢索是否仍能針對加密後的內文運作,文件中也未提及。在向任何人承諾此功能前,請先在測試帳號上進行驗證。
此外,若使用者遺失私密金鑰,其郵件將永久遺失。基於設計,此機制不提供任何復原路徑。
WKD 是網頁伺服器的工作,而非郵件伺服器的工作
WKD (Web Key Directory) 是 OpenPGP 機制中的另一半,它解決了不同的問題。它將您的公開金鑰發布在您網域下的一個固定 HTTPS URL,以便寄件者的郵件用戶端能在郵件發出前找到金鑰並進行加密。這就是端對端加密。Stalwart 的靜態加密 (at-rest encryption) 則是針對儲存在磁碟上的副本。設定其中一項並不會自動獲得另一項的功能。
Stalwart 不提供 WKD 服務。根據 2026 年 8 月 28 日查閱的說明文件,其 HTTP 端點列出了 jmap、caldav、carddav、oauth-authorization-server、openid-configuration、acme-challenge、mta-sts.txt、mail-v1.xml 以及自動設定 (autoconfig) 的常用路徑。其中並不包含 openpgpkey 路徑。請使用一般的靜態網頁伺服器來提供此服務。
該規範定義了兩種配置方式。進階方法使用 https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe,直接方法則使用 https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe。該 32 字元的字串是將郵件地址的本機部分轉為小寫後,進行 SHA-1 雜湊並以 z-base-32 編碼的結果,因此請勿手動建立這些檔案名稱。請使用 GnuPG 為您產生。
gpg --export --armor you@example.org > you.asc
gpg-wks-client --print-wkd-url you@example.org
gpg-wks-client --install-key you.asc you@example.org使用 --print-wkd-url 可以列印出用戶端將會存取的 URL(使用子網域格式)。--install-key 會將金鑰寫入一個鏡像 WKD 配置的本機目錄樹,預設位於名為 openpgpkey 的頂層目錄下,您可以使用 -C dir 進行修改。將該目錄樹複製到您的網頁根目錄,並在 hu 目錄旁加入必要的 policy 檔案(空檔案即可),最後使用 curl 存取您的 URL,確認其回傳的是金鑰位元組而非 404 錯誤。
單一 VPS 上的儲存配置
Stalwart 將儲存角色分為四類:用於郵件信箱狀態等結構化記錄的資料儲存(data store)、用於原始郵件內容與附件的二進位物件儲存(blob store)、用於全文檢索索引的搜尋儲存(search store),以及用於速率限制器、驗證權杖與工作階段資料的記憶體內儲存(in-memory store)。每一項皆可指向不同的後端。支援的後端包括 RocksDB、FoundationDB、PostgreSQL、MySQL、SQLite、相容 S3 的物件儲存、Azure Blob Storage、Redis、ElasticSearch 與 Meilisearch。
在單一 VPS 上,解決方案很簡單。官方文件稱 RocksDB 為「Stalwart 單節點安裝的推薦後端,因其速度與可靠性」。Redis 僅支援作為記憶體內儲存,不能作為資料儲存或二進位物件儲存,因此開始使用時無需額外部署 Redis 容器。若未來信箱容量超過磁碟空間,可再將二進位物件儲存遷移至 S3。
備份方式取決於後端。對於外部資料庫,請使用該資料庫專屬的備份程序。對於內嵌式資料庫,FAQ 指出應複製 /var/lib/stalwart 目錄。請在服務停止時執行此操作,或透過檔案系統或磁碟區快照進行。若在鍵值儲存執行期間進行檔案層級複製,可能會擷取到寫入中的狀態,導致備份損毀,且直到嘗試還原時才會發現。
取代 Rspamd 的垃圾郵件過濾器
過濾程序在同一處理程序內執行,因此無需額外維護另一個 daemon。分類器設定位於 SpamClassifier 單例(singleton)下的「設定」>「垃圾郵件過濾器」>「分類器」。它採用具備特徵雜湊(feature hashing)的 FTRL-Proximal 演算法。FtrlFh 是大多數部署環境建議使用的預設值。FtrlCcfh 則改用布穀鳥雜湊(cuckoo feature hashing)以減少雜湊碰撞,適用於大規模部署。它會持續進行訓練:當使用者將郵件標記為垃圾郵件或正常郵件時,該標籤會直接回饋至未來的決策中。
分類器周邊整合了 DNS 黑名單、灰名單(greylisting)、網路釣魚偵測、垃圾郵件陷阱與 Pyzor;若您有無法捨棄的規則,亦可選擇透過 milter 呼叫 SpamAssassin。
為何 mailcow 仍是合適的選擇
Stalwart 並未內建網頁郵件(webmail)功能。這是目前最大的缺口,且差距顯著。根據 2026 年 8 月 28 日查閱的 mailcow 文件,其包含 SOGo 等十六個組件,能直接為使用者提供瀏覽器收件匣以及 CalDAV 和 CardDAV 介面。Stalwart 於 2025 年 6 月 20 日發布的發展藍圖指出,內建網頁郵件「在我們的計畫中,但目前並非首要任務」,預計在 1.0 版本後使用 Rust 與 Dioxus 開發,「最快可能在 2026 年某個時間點」。截至 2026 年 8 月 28 日,該專案部落格尚未發布相關公告。因此,若選擇 Stalwart,您必須自行部署 Roundcube,或要求每位使用者自行設定郵件用戶端。
Stalwart 確實具備網頁管理介面,因此這並非大眾預期中的缺口。第二個缺口是版本的成熟度。FAQ 指出 Stalwart 目前處於 0.x 版本,資料配置與設定格式在 v1.0 前仍可能變更,這可能需要進行遷移。該專案 2026 年 6 月的貼文標題為「零待處理錯誤報告:邁向 Stalwart 1.0 之路」,這說明了目前的進度:即將完成,但尚未達標。
第三個缺口是功能清單中鮮少提及的部分。Postfix、Dovecot 與 Rspamd 擁有長達十年的技術支援與解答累積。在凌晨兩點、郵件堆積且使用者等待處理時,搜尋到完全吻合的錯誤訊息,其價值遠高於優雅的架構。若您正處於這種情況,我們的 mailcow 安裝指南涵蓋了整個堆疊的端到端流程,這能讓您少熬一點夜。
若您追求單一執行檔、單一設定檔與 JMAP 支援,且願意承擔早期採用者的風險,請選擇 Stalwart。若您需要現成的網頁郵件功能,並希望擁有龐大的現有技術資源庫,請選擇 mailcow。
遷移現有郵件
通用的遷移路徑是透過 imapsync 進行 IMAP 對 IMAP 的傳輸,此工具不限制兩端的軟體類型。請務必先執行測試運作(dry run)。
imapsync --dry \
--host1 old.example.org --user1 you@example.org --passfile1 /root/.old.pw \
--host2 mail.example.org --user2 you@example.org --passfile2 /root/.new.pw--dry 參數會讓 imapsync「僅模擬執行而不實際變更;僅輸出預計執行的動作」,因此在移除此旗標前,請先閱讀輸出內容。每個密碼檔案的第一行皆存放密碼,請在遷移完成後 chmod 600 兩者並將其刪除。
Stalwart 亦提供較新的工具,多數第三方指南尚未更新相關資訊。其官方部落格記錄了 JMAP 匯入與匯出工具 Vandelay(2026 年 5 月 29 日),以及用於零停機升級的遷移代理(2026 年 6 月 10 日)。在規劃大規模遷移前,請先閱讀上述兩篇文件,因為它們比目前網路上能找到的絕大多數資料都更為新穎。
失敗模式與常見錯誤訊息
管理介面無法載入。 FAQ 已直接說明此問題:網頁介面套件是在首次執行時從 GitHub 下載,因此若伺服器無法對 github.com 進行對外 HTTPS 連線,服務雖會啟動但頁面會呈現空白。請從伺服器端執行 curl -sI https://github.com/stalwartlabs/webui/releases/latest/ 進行檢查。FAQ 列出的其他常見原因包括 HTTP 或 HTTPS 協定不匹配,以及反向代理未正確轉發客戶端 IP。
日誌中找不到引導密碼(bootstrap password)。 該密碼僅在引導模式(bootstrap mode)啟動時顯示一次。若服務在此之後已重啟,請使用 sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode' 擴大查看範圍。若密碼確實遺失,請在 /etc/stalwart/stalwart.env 中設定 STALWART_RECOVERY_ADMIN 並重啟服務。
透過本地代理進行轉發(relay)遭拒。 v0.16.19 版本說明中記錄了一項修正,解決了轉發路由被 host resolves loopback address 拒絕的問題。若您遇到該字串,代表您正在執行舊版建置。請直接升級,勿嘗試繞過此問題。
自行編寫 unit 檔案後服務無法啟動。 若缺少 AmbientCapabilities=CAP_NET_BIND_SERVICE,stalwart 使用者將無法綁定 25、443、465 或 993 埠,導致服務在嘗試監聽第一個埠時失敗。請從安裝程式產生的 unit 檔案中複製 capability 設定行。
憑證無法核發。 HTTP-01 驗證需要 80 埠可達且未被佔用。TLS-ALPN-01 驗證則需要 Stalwart 本身在 443 埠回應 TLS 握手。若伺服器上其他程式佔用了上述任一埠,ACME 將會持續靜默失敗,而其他服務看起來則運作正常。
FAQ
Stalwart 能否在單一 VPS 上取代 Postfix、Dovecot 與 Rspamd?
可以。單一個 Rust 二進位檔即可處理 SMTP、IMAP、POP3、JMAP、CalDAV、CardDAV 與 WebDAV,並內建垃圾郵件過濾器、郵件儲存庫與 ACME 客戶端。系統中僅需一個 systemd 單元與位於 /etc/stalwart/config.json 的一個設定檔,無須維護四個守護行程及其整合配置。它無法取代的是您的 DNS 區域設定或供應商對 25 埠的政策,這才是自架郵件伺服器能否成功的關鍵。
Stalwart 郵件伺服器需要多少 RAM?
根據 2026 年 8 月 28 日查閱的 Stalwart 系統需求頁面,閒置時約需 100 MB,並建議 1 GB RAM 適用於 5 至 10 人的小型部署。低流量環境(約 5 名使用者)可在單核心 CPU 上執行。預設連線限制為跨所有服務共 8,192 個併發連線,此數值可調整,因此上限取決於連線數與郵件量,而非僅取決於使用者人數。官方未公布最低磁碟空間要求,請依據您預計保留的郵件量規劃磁碟大小。
轉換至 Stalwart 能否提升郵件送達率?
不能。送達率取決於您的 VPS 是否開放對外 TCP 25 埠、IP 是否設定反向 DNS,以及網域是否正確設定 SPF、DKIM 與 DMARC。Stalwart 確實支援 DANE、MTA-STS 與 SMTP TLS 報告,也能為您發布 MTA-STS 政策,但這些功能旨在提升傳輸安全性,而非決定接收端網路是否信任您的位址。在安裝任何軟體前,請先使用 nc -vz -w 5 alt1.aspmx.l.google.com 25 測試 25 埠。
Stalwart 是否包含 Webmail?
截至 2026 年 8 月 28 日尚未包含。它提供的是網頁管理介面,兩者功能不同。該專案於 2025 年 6 月 20 日發布的發展藍圖指出,計畫在 1.0 版本後開發以 Rust 與 Dioxus 構建的 Webmail 客戶端,「最快可能在 2026 年某個時間點」,目前專案部落格尚未發布相關公告。若您的使用者現在就需要瀏覽器收件匣,請額外部署 Roundcube 或使用整合 SOGo 的架構。
Stalwart 的靜態加密(encryption at rest)能防護什麼?
它會在將郵件寫入磁碟前,使用使用者的 OpenPGP 或 S/MIME 公鑰進行加密,因此即使磁碟或備份遭竊,或是管理員讀取儲存庫,也無法還原郵件內容。這並非端對端加密:郵件在送達時為明文,隨後才進行加密,因此在送達前的每一跳(hop)都能看見內容。encryptOnAppend 預設為 false,因此除非您手動更改設定,否則用戶端寫入的「寄件備份」與「草稿」將保持明文。官方文件僅涵蓋郵件內容,未提及中繼資料(metadata)、索引項目或針對金鑰上傳前已儲存郵件的重新加密,請務必自行驗證,切勿預設其具備上述功能。