如何在 Ubuntu Server 用建置郵件伺服器
目前 ubuntu 上可以使用的 mail server 套件非常多, 可以參考這邊的連結
15 Top Open Source Email Servers for Ubuntu in 2025
https://forwardemail.net/en/blog/open-source/ubuntu-email-server
我們這邊就以 cutexyz.com 這個 domain 來做示範, 有關收件 server 的規格我們這邊也選用 pop, 而非 imap, 差別不大, 端看你的需求而定, 接下來我們要DNS設定與安裝 mailcow 並將環境設定好, SOP 如下
# domain 設定, 請到你的 domain 註冊業者那邊去設定, i.e. squarespace, cloudflare, aws...etc
pop.cutexyz.com A record => mail server ip
smtp.cutexyz.com A record => mail server ip
mail.cutexyz.com A record => mail server ip
@ MX record => mail server ip
ports 的確認, 這邊跟你是否要使用安全性連線有關係, 如果需要安全性連線, 也記得要將 SSL 憑證準備好喔!
# POP 使用的 ports:
# 110, 標準連接埠
# 995, SSL/TLS 加密連接埠
# SMTP 使用 ports,
# 25, 最常見的 SMTP 伺服器之間的連線, 但是防火牆通常會封鎖該連接埠, 因為垃圾郵件發送者嘗試濫用它來
傳送大量垃圾郵件, 這很恐怖的!
# 465, 經專供具有安全通訊端層 (SSL) 加密的 SMTP 使用, 但是 SSL 已被
Transport Layer Security (TLS) 取代, 因此現代電子郵件系統通常不再使用該連接埠,
它只存在於舊版(過時的)系統中
# 587 現在是電子郵件提交的預設連接埠。透過此連接埠進行的 SMTP 通訊使用 TLS 加密。
以上都完成之後, 記得要檢查看看你的防火牆或是 router 那邊 NAT 有無設定完整!!
==== step 1, 檢查環境中是否有 docker ====
# 首先確定你有無 docker 環境, 如果沒有的話可以依照以下 docker 官方做法進行
# 先將有可能會衝突的套件移除
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 開始進行安裝
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
==== step2, 產生 mailcow 設定檔 ====
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
# 執行設定檔產生器
./generate_config.sh
# 期間會問你的 mail server domain => mail.cutexyz.com or pop.cutexyz.com
# 再來會問你所在區域的時區 => Asia/Taipei
# 最後選擇你 git 要拉出來的版本, 當然選 1, master
==== step3, 調整剛剛產出的設定檔 ====
vi mailcow.conf
# 調整如下
SKIP_IP_CHECK=y
SKIP_HTTP_VERIFICATION=y
ALLOW_ADMIN_EMAIL_LOGIN=y
# 另外有關 db, redis 也須依你的環境調整, 舉例來說
DBNAME=mailcow_dbname
DBUSER=mailcow_usernsme
==== step4, 啟動 docker ====
docker compose pull
docker compose up -d
# 要注意你的 container 內有無 apache 喔! 不然會搶 80 port, 不然就是要再去改
==== step5, 登入 admin ====
# admin 管理這介面登入用 id / pwd
admin / moohoo
# 點右上角的 mail => configuration 進去之後, 點 Add domain, 將你的 domain 填入,
直接點右下角的 Add domain and restart.
# 接下來看到清單已更新, 點右邊的 DNS, 他會幫你檢查你的設定是否 ok, 如果正確的話會用不同顏色去表示.
以上都完成後就可以嘗試寄出測試信件!! Demo end
Tool to verify your email settings
https://mxtoolbox.com/