SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-10-05

ติดตั้ง Stalwart เมลเซิร์ฟเวอร์บน VPS ด้วยไฟล์เดียว

เจาะลึกการใช้ Stalwart แทนที่ Postfix และ Dovecot บน VPS พร้อมวิเคราะห์ข้อจำกัดของ Rust binary ตัวนี้ และเปรียบเทียบว่าเมื่อใดที่การเลือกใช้ mailcow ยังเป็นทางเลือกที่คุ้มค่ากว่า

สิ่งที่ Stalwart รวมไว้ในไบนารีเดียว

Stalwart คือเมลเซิร์ฟเวอร์ที่คุณสามารถรันบน VPS เครื่องเดียวในรูปแบบ Rust binary เพียงไฟล์เดียว มันทำหน้าที่ตอบสนองโปรโตคอล SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV และ WebDAV จากกระบวนการทำงาน (process) เดียวกัน อีกทั้งยังมีระบบกรองสแปม, ระบบจัดเก็บข้อความ และไคลเอนต์ ACME ในตัว ในขณะที่สแต็กแบบดั้งเดิมต้องใช้ Postfix, Dovecot, Rspamd, ฐานข้อมูลสำหรับบัญชีผู้ใช้ และเครื่องมือจัดการใบรับรองแยกต่างหาก Stalwart เข้ามาแทนที่ทั้งหมดนั้นด้วย service unit เพียงรายการเดียวและไฟล์คอนฟิกูเรชันเดียวที่ /etc/stalwart/config.json

ตัวเลข การตั้งค่า และคำสั่งทั้งหมดด้านล่างนี้ อ้างอิงจากเอกสารประกอบ หน้าเผยแพร่ และสคริปต์ติดตั้งของ Stalwart โดยตรวจสอบเมื่อวันที่ 28 สิงหาคม 2026 สำหรับรุ่น v0.16.19 (เผยแพร่เมื่อวันที่ 24 สิงหาคม 2026) คำสั่งเหล่านี้มีไว้เพื่อให้คุณนำไปรันบนเซิร์ฟเวอร์ของคุณเอง โดยแต่ละคำสั่งจะมีขั้นตอนการตรวจสอบเพื่อยืนยันว่าการทำงานสำเร็จหรือไม่

Stalwart ใช้สัญญาอนุญาตแบบคู่ภายใต้ GNU Affero General Public License v3.0 (AGPL-3.0) และ Stalwart Enterprise License v2 โดยบางฟีเจอร์จะมีให้ใช้งานเฉพาะในรุ่นองค์กรเท่านั้น รายการ HTTP endpoint ที่ระบุไว้ในเอกสารจะทำเครื่องหมาย /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

ผลลัพธ์ที่ปกติจะแสดง Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded! ภายในเวลาประมาณหนึ่งวินาที หากพอร์ตถูกบล็อก การเชื่อมต่อจะค้างอยู่เต็มห้าวินาทีแล้วจึงแสดง nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out เนื่องจากแพ็กเก็ตถูกดรอปที่ต้นทางและไม่มีการส่งสัญญาณรีเซ็ตกลับมาหาคุณ หากคุณพบเหตุการณ์นี้ ให้เปิดตั๋วแจ้งปัญหา (ticket) กับผู้ให้บริการของคุณ ไม่มีเมลเซิร์ฟเวอร์ใดสามารถส่งข้อมูลผ่านแพ็กเก็ตที่ถูกดรอปได้

ด่านที่สองคือสิ่งที่เครือข่ายปลายทางมองที่ IP address และโดเมนของคุณ ซึ่งหมายถึง reverse DNS ของ IP, SPF, DKIM, DMARC และประวัติการส่งเมลของช่วง IP address ที่คุณได้รับมา หน้าการตั้งค่า DNS ของ Stalwart ระบุไว้อย่างชัดเจนว่างานส่วนนี้เกิดขึ้นที่ใด: ระเบียน reverse DNS "โดยปกติแล้วจะถูกกำหนดค่าโดยผู้ให้บริการโฮสติ้ง ไม่ใช่โดยตัว Stalwart เอง" เช่นเดียวกันกับส่วนที่เหลือของหมวดหมู่นี้ ซึ่งทั้งหมดอยู่ใน DNS zone และแผงควบคุมของผู้ให้บริการของคุณ ไม่ใช่ในเมลเซิร์ฟเวอร์

ดังนั้นหน้านี้จึงไม่ได้สอนวิธีการตั้งค่าระเบียนเหล่านั้นซ้ำ เรามีหน้าอื่นที่ครอบคลุมเรื่องนี้ไว้แล้ว: การตั้งค่า SPF, DKIM และ DMARC สำหรับทุกบริการที่ส่งเมล หากคุณยังไม่ได้ตัดสินใจว่าจะรันเมลเซิร์ฟเวอร์ด้วยตนเองหรือไม่ ให้เริ่มต้นที่ มุมมองตามความเป็นจริงว่าการโฮสต์อีเมลด้วยตนเองยังคุ้มค่าหรือไม่ การเลือกใช้ Stalwart ไม่ได้เปลี่ยนแปลงปัจจัยในการตัดสินใจเหล่านั้นเลย

สิ่งที่ VPS ขนาดเล็กจำเป็นต้องมีเพื่อรัน Stalwart mail server

หน้าความต้องการของระบบของ Stalwart ซึ่งอ่านเมื่อวันที่ 28 สิงหาคม 2026 ระบุตัวเลขเหล่านี้ การใช้หน่วยความจำขณะไม่ได้ใช้งาน (idle) อยู่ที่ประมาณ 100 MB การใช้งานขนาดเล็กสำหรับผู้ใช้ 5 ถึง 10 คนสามารถทำงานได้ดีบน RAM ขนาด 1 GB การตั้งค่าที่มีการรับส่งข้อมูลต่ำสำหรับผู้ใช้ประมาณ 5 คนสามารถทำงานได้บน CPU 1 คอร์ และหน้านั้นยังระบุเพิ่มเติมว่า "เมื่อการทำงานพร้อมกัน (concurrency) และกิจกรรมเพิ่มขึ้น จำเป็นต้องใช้คอร์ CPU มากขึ้นเพื่อรักษาค่า latency ให้ต่ำและมี throughput สูง" ค่าเริ่มต้นสูงสุดคือ 8,192 การเชื่อมต่อพร้อมกันสำหรับทุกบริการ ซึ่งสามารถกำหนดค่าได้

หน้านั้นไม่ได้ระบุขนาดดิสก์ขั้นต่ำ ดังนั้นควรจัดสรรขนาดดิสก์ให้เพียงพอสำหรับอีเมลที่คุณคาดว่าจะเก็บไว้ รวมถึงพื้นที่ว่างเผื่อสำหรับการบีบอัดข้อมูล (compact) ของที่เก็บข้อมูล

เส้นทางขาออก 3 เส้นทางต้องทำงานได้ มิฉะนั้นเซิร์ฟเวอร์จะดูเหมือนขัดข้องในลักษณะที่ไม่เกี่ยวข้องกับอีเมล โดยเซิร์ฟเวอร์จะดึงชุดไฟล์ web interface จาก https://github.com/stalwartlabs/webui/releases/latest/ และเข้าถึง https://acme-v02.api.letsencrypt.org/directory เพื่อขอรับใบรับรอง (certificates) นอกจากนี้ยังจำเป็นต้องใช้ DNS บนพอร์ต UDP และ TCP หมายเลข 53 สำหรับการค้นหา MX และระเบียนการยืนยันตัวตน (authentication record) หากมีการตั้งค่า egress firewall ที่เข้มงวดจนบล็อกเส้นทางแรก คุณจะได้ mail server ที่ทำงานอยู่แต่ไม่มีหน้าจอสำหรับผู้ดูแลระบบ (admin interface)

ติดตั้งเวอร์ชันที่ระบุไว้ (pinned release) แทนการใช้ "latest"

ตัวติดตั้งอย่างเป็นทางการเป็นสคริปต์ shell ให้อ่านเนื้อหาก่อนดำเนินการ

curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.sh

การอ่านสคริปต์ดังกล่าวในวันที่ 28 สิงหาคม 2026 แสดงให้เห็นการทำงานที่ชัดเจน สคริปต์จะสร้างบัญชีผู้ใช้บริการ stalwart และไดเรกทอรีที่จำเป็น จากนั้นจะดาวน์โหลดไฟล์จาก https://github.com/stalwartlabs/stalwart/releases/latest/download โดยไฟล์ binary จะถูกวางไว้ที่ /usr/local/bin/stalwart ด้วยโหมด 0755 ส่วนไฟล์ตั้งค่าจะอยู่ที่ /etc/stalwart/config.json, ข้อมูลอยู่ที่ /var/lib/stalwart, และ log อยู่ที่ /var/log/stalwart โดยทั้งสามไดเรกทอรีจะใช้โหมด 0750 และมี stalwart เป็นเจ้าของ ไฟล์ environment จะถูกเขียนลงที่ /etc/stalwart/stalwart.env ด้วยโหมด 0640 โดยมี root:stalwart เป็นเจ้าของ สคริปต์รองรับตัวเลือก install prefix และ flag --fdb สำหรับการ build FoundationDB แต่ไม่รองรับการระบุเวอร์ชัน

ประเด็นสุดท้ายมีความสำคัญ สคริปต์จะดึงเวอร์ชันล่าสุดมาเสมอ ทำให้เซิร์ฟเวอร์สองเครื่องที่ติดตั้งห่างกันหนึ่งสัปดาห์อาจไม่ได้รันโค้ดชุดเดียวกัน ให้คุณระบุเวอร์ชันของ binary เองหลังจากนั้น ซึ่งเป็นแนวทางการอัปเกรดที่ระบุไว้ใน release notes ของ v0.16.19 ว่า "หากคุณกำลังอัปเกรดจาก v0.16.x ให้แทนที่ไฟล์ binary (หรือรัน 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 stalwart

systemctl is-active stalwart ควรแสดงผลเป็น active หากเป็นค่าอื่น ให้ตรวจสอบ journalctl -u stalwart -n 50 ไฟล์ที่ปล่อยออกมาทุกเวอร์ชันจะมาพร้อมกับชุด .sigstore.json ที่ตรงกัน เพื่อให้สามารถตรวจสอบลายเซ็นของไฟล์ที่ดาวน์โหลดมาก่อนทำการติดตั้งได้

unit ที่สคริปต์เขียนขึ้นจะรันในฐานะ User=stalwart และตั้งค่า AmbientCapabilities=CAP_NET_BIND_SERVICE ความสามารถนี้เป็นเหตุผลที่บัญชีผู้ใช้ทั่วไปสามารถ bind พอร์ต 25, 443, 465 และ 993 ได้ หากคุณเขียน unit ของตนเองในภายหลังแล้วละเว้นบรรทัดดังกล่าว บริการจะล้มเหลวเมื่อเริ่มทำงาน เนื่องจากผู้ใช้ทั่วไปไม่สามารถ bind พอร์ตที่ต่ำกว่า 1024 ได้

ตำแหน่งที่แสดงรหัสผ่านผู้ดูแลระบบครั้งแรก

Stalwart จะเริ่มทำงานในโหมด bootstrap และเขียนรหัสผ่านชั่วคราวความยาว 16 ตัวอักษรลงใน log ของบริการเพียงครั้งเดียว

sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'

ตัวช่วยตั้งค่า (setup wizard) จะทำงานบน HTTP ปกติที่พอร์ต 8080 ดังนั้นห้ามเปิดพอร์ตนี้สู่สาธารณะ ให้ใช้วิธีทำ SSH tunnel จากแล็ปท็อปของคุณแทน:

ssh -N -L 8080:127.0.0.1:8080 you@your-vps

จากนั้นเปิด http://127.0.0.1:8080/admin และลงชื่อเข้าใช้ด้วย admin โดยใช้รหัสผ่านจากใน log ตัวช่วยตั้งค่าจะถามถึง hostname ของเซิร์ฟเวอร์, โดเมนอีเมลเริ่มต้น, TLS, พื้นที่จัดเก็บข้อมูล, ไดเรกทอรีบัญชีผู้ใช้, การบันทึก log และการจัดการ DNS ให้รีสตาร์ทบริการเมื่อตั้งค่าเสร็จสิ้น จากนั้นให้ใช้ https://<your-host>/admin นับจากจุดนั้นเป็นต้นไป

หากรหัสผ่านถูกเลื่อนหายไปจาก log ให้ตั้งรหัสผ่านถาวรแทน /etc/stalwart/stalwart.env มีรายการที่ถูกคอมเมนต์ไว้สำหรับการตั้งค่านี้โดยเฉพาะ รวมถึง STALWART_RECOVERY_ADMIN=admin:changeme, STALWART_RECOVERY_MODE=true และ STALWART_RECOVERY_MODE_PORT (ค่าเริ่มต้นคือ 8080) ให้เอาเครื่องหมายคอมเมนต์ออก รีสตาร์ทบริการ ลงชื่อเข้าใช้ แล้วจึงใส่เครื่องหมายคอมเมนต์กลับไปเหมือนเดิม หน้าเอกสารการเพิ่มความปลอดภัย (hardening) ของ Stalwart ระบุว่าให้เก็บข้อมูลประจำตัวนั้นไว้สำหรับกรณีฉุกเฉินเท่านั้น และห้ามลงชื่อเข้าใช้ IMAP, JMAP หรือ WebDAV ด้วยบัญชีผู้ดูแลระบบโดยเด็ดขาด

หน้าเดียวกันนี้ยังระบุรายการพอร์ตที่ควรเปิดไว้ ได้แก่ พอร์ต 25 สำหรับ SMTP ขาเข้า, 465 สำหรับการส่งอีเมลด้วย implicit TLS, 993 สำหรับ IMAPS และ 443 สำหรับการใช้งาน HTTP ทั้งหมด โดยระบุว่าพอร์ต 587, 143, 4190, 110, 995 และ 8080 ไม่ใช่พอร์ตที่จำเป็น และแนะนำให้ปิดพอร์ต 8080 ทันทีที่ตั้งค่าเสร็จสิ้น

การรันบน Docker โดยใช้ pinned tag

อิมเมจที่ระบุไว้ในเอกสารคือ stalwartlabs/stalwart โดย tag v0.16.19 ปรากฏอยู่บน Docker Hub เมื่อวันที่ 28 สิงหาคม 2026 พร้อมกับตัวแปร -alpine ให้คุณระบุเวอร์ชัน patch แบบเจาะจงแทนการใช้ floating tag อย่าง v0.16 ด้วยเหตุผลเดียวกับที่กล่าวถึงไฟล์ binary ด้านบน

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 โดยตัด listener ที่ไม่จำเป็นออกและผูกพอร์ตสำหรับตั้งค่าไว้ที่ localhost ให้เริ่มการทำงานและอ่านบรรทัด bootstrap เดียวกัน:

docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'

หน้า Docker ยังระบุวิธีใช้ -e STALWART_RECOVERY_ADMIN=admin:mySecretPass เพื่อกำหนด credential แบบถาวรในขณะเริ่มระบบ ซึ่งเทียบเท่ากับคีย์ environment: ใน Compose หากคุณต้องการวิธีนี้มากกว่าการอ่าน log

รายการพอร์ตทั้งหมดตามเอกสาร และเหตุผลที่ไฟล์นี้สั้นกว่า

หน้า Docker ของ Stalwart ระบุพอร์ต 443, 8080, 25, 587, 465, 143, 993, 110, 995 และ 4190 ส่วนหน้า hardening ระบุว่าพอร์ต 587, 143, 110, 995 และ 4190 ไม่จำเป็น และแนะนำให้ปิดพอร์ต 8080 หลังจากการตั้งค่าเสร็จสิ้น ให้เพิ่มเฉพาะพอร์ตที่ไคลเอนต์ของคุณใช้งานจริงเท่านั้น หากโทรศัพท์ของคุณจำเป็นต้องใช้ STARTTLS submission ให้เปิดพอร์ต 587 หากผู้ใช้ของคุณเขียนกฎ Sieve จากเดสก์ท็อปไคลเอนต์ ให้เปิดพอร์ต 4190

หากคุณยังไม่คุ้นเคยกับ Compose คู่มือ Docker Compose สำหรับ VPS ของเรา จะครอบคลุมเรื่องโครงสร้างไฟล์และรูปแบบ named-volume ที่ใช้ในที่นี้ ข้อควรระวังที่ส่งผลกระทบต่อเมลเซิร์ฟเวอร์โดยเฉพาะคือ Docker จะเปิดพอร์ตโดยการเขียนกฎ firewall ของตัวเอง และกฎเหล่านั้นจะถูกตรวจสอบก่อนกฎของ ufw ดังนั้น ufw deny 8080 จึงไม่สามารถปิดพอร์ตที่ Compose เปิดไว้ได้ การผูกพอร์ตเข้ากับ 127.0.0.1 ในการทำ port mapping คือวิธีที่ใช้ปิดพอร์ตได้อย่างแท้จริง ซึ่งเป็นเหตุผลว่าทำไมไฟล์ด้านบนจึงทำเช่นนั้นและยังคงต้องใช้ SSH tunnel อยู่

การใช้ TLS โดยไม่พึ่งพา certbot และผลกระทบที่ตามมา

Stalwart มีการติดตั้ง ACME (automatic certificate management environment) มาในตัวโดยตรง จึงไม่จำเป็นต้องใช้ certbot หรือตั้งค่า renewal hook เอกสารประกอบได้ระบุวิธีการตรวจสอบความถูกต้องไว้ 4 รูปแบบ วิธี HTTP-01 จะตอบสนองต่อคำขอ challenge ผ่านพอร์ต 80 ส่วนวิธี TLS-ALPN-01 จะแสดงใบรับรองที่สร้างขึ้นเฉพาะกิจบนพอร์ต 443 โดยใช้โปรโตคอล ALPN สำหรับ ACME โดยเฉพาะ สำหรับวิธี DNS-01 จะใช้วิธีการประกาศ TXT record ชั่วคราว ซึ่งเป็นหนึ่งในสองวิธีที่สามารถออกใบรับรองแบบ wildcard ได้ และวิธี DNS-PERSIST-01 จะใช้ TXT record สำหรับการยืนยันตัวตนแบบถาวรแทนการเขียน record ใหม่ทุกครั้งที่มีการต่ออายุ

ผลกระทบคือ Stalwart ต้องการสิทธิ์ในการควบคุมพอร์ตดังกล่าว วิธี TLS-ALPN-01 จะทำงานโดยการทำ TLS handshake ด้วยตัวเอง ดังนั้นจึงไม่สามารถทำงานได้หากอยู่หลัง reverse proxy ที่ทำหน้าที่ TLS termination ให้คุณ หาก nginx หรือ Caddy ครอบครองพอร์ต 443 บนเครื่องนั้นอยู่แล้ว คุณต้องเปลี่ยนไปใช้วิธี DNS-01 หรือกำหนด IP address แยกต่างหากให้กับ Stalwart แทน

DANE และ MTA-STS รวมถึงค่าเริ่มต้นที่คุณควรทราบ

ทั้งสองอย่างนี้ถูกกำหนดค่าตามกลยุทธ์ TLS บนออบเจกต์ MtaTlsStrategy โดยเข้าไปที่ Settings, MTA, Outbound, TLS Strategies ในหน้าเว็บอินเทอร์เฟซ ฟิลด์ dane มีค่าเริ่มต้นเป็น optional ซึ่งจะพยายามตรวจสอบ DANE เมื่อผู้รับมีการประกาศ TLSA record และจะถอยกลับไปใช้ STARTTLS ปกติหากไม่มีการประกาศดังกล่าว หากตั้งค่าเป็น require การส่งอีเมลจะดำเนินการต่อเมื่อตรวจสอบ TLSA record ได้เท่านั้น ฟิลด์ mtaSts มีการทำงานในลักษณะเดียวกัน โดยมีค่าเริ่มต้นเป็น optional ค่า timeout ที่เกี่ยวข้องคือ tlsTimeout (ค่าเริ่มต้น 3 นาที) และ mtaStsTimeout (ค่าเริ่มต้น 5 นาที)

ในส่วนของขาเข้า Stalwart สามารถประกาศนโยบาย MTA-STS ของคุณเองได้ที่ https://mta-sts.<domain>/.well-known/mta-sts.txt ซึ่งจำเป็นต้องเปิดพอร์ต 443 ไว้ ซิงเกิลตัน MtaSts มีค่า mode (ค่าเริ่มต้น testing), maxAge (ค่าเริ่มต้น 7 วัน) และ mxHosts ซึ่งจะถอยกลับไปใช้ชื่อโฮสต์ในใบรับรอง TLS ของคุณหากเว้นว่างไว้ คุณต้องเตรียม DNS record สองรายการ ได้แก่ mta-sts CNAME ที่ชี้ไปยังโฮสต์อีเมล และ _mta-sts TXT record ที่ระบุตัวตนนโยบาย

dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txt

การค้นหา TXT ควรส่งคืนสตริง v=STSv1; id=... และคำสั่ง curl ควรส่งคืนเนื้อหานโยบาย หาก curl ไม่ส่งคืนค่าใดๆ แสดงว่าพอร์ต 443 ถูกปิดอยู่ หรือใบรับรองสำหรับ mta-sts.example.org ไม่เคยถูกออกให้

ให้คงค่า mode ไว้ที่ testing จนกว่าการตรวจสอบทั้งสองรายการจะผ่าน นโยบายในโหมด enforce ที่มีใบรับรองผิดพลาดจะทำให้เซิร์ฟเวอร์อื่นไม่สามารถส่งอีเมลถึงคุณได้ และคุณจะทราบเรื่องนี้จากผู้ใช้งานของคุณเองแทนที่จะเห็นใน log DANE ก็มีกับดักที่คล้ายกัน คือมันต้องการโซนที่ลงนามด้วย DNSSEC และ TLSA record ที่ผูกกับ leaf certificate จะต้องถูกประกาศใหม่ทุกครั้งที่ ACME ต่ออายุใบรับรอง ให้ผูกกับ issuing CA แทน หรือยอมรับภาระในการต่ออายุใบรับรองตามรอบ

การเข้ารหัสข้อมูลที่จัดเก็บ (Encryption at rest) ไม่ใช่การเข้ารหัสแบบต้นทางถึงปลายทาง (End-to-end encryption)

นี่คือฟีเจอร์ที่มักถูกเข้าใจผิดบ่อยที่สุด ดังนั้นนี่คือสิ่งที่เอกสารระบุไว้อย่างชัดเจน ข้อความที่เป็นข้อความธรรมดา (plain-text) ของผู้ใช้แต่ละคนจะถูกเข้ารหัสโดยอัตโนมัติด้วยใบรับรอง OpenPGP หรือ S/MIME ของผู้ใช้ก่อนที่จะถูกเขียนลงดิสก์ encryptAtRest จะถูกเปิดใช้งานโดยค่าเริ่มต้นและมีผลกับข้อความที่เข้ามาผ่าน SMTP หรือ LMTP หากผู้รับได้ลงทะเบียนกุญแจเข้ารหัสไว้แล้ว encryptOnAppend จะถูกตั้งค่าเป็น false โดยค่าเริ่มต้น "ซึ่งจะปล่อยให้ข้อความที่ถูกเพิ่มเข้าไป (appended messages) ไม่ถูกเปลี่ยนแปลง เพื่อให้ไคลเอ็นต์ยังคงควบคุมเนื้อหาที่จัดเก็บไว้ได้อย่างเต็มที่" OpenPGP ใช้ PGP/MIME แทนที่ PGP/Inline แบบเก่า โดยใช้ AES-256 หรือ AES-128 Stalwart ไม่ได้สร้างกุญแจให้ ผู้ใช้ต้องส่งออกกุญแจสาธารณะในรูปแบบ ASCII-armored และลงทะเบียนเป็นวัตถุ PublicKey ภายใต้ Account, Public Keys

ดังนั้น มันจึงช่วยป้องกันกรณีดิสก์อิมเมจถูกขโมย, ข้อมูลสำรองถูกขโมย และผู้ดูแลระบบอ่านข้อมูลในที่จัดเก็บหลังจากส่งมอบแล้ว หากไม่มีกุญแจส่วนตัว (private key) ข้อมูลที่จัดเก็บไว้จะไม่สามารถอ่านได้ และผู้ดูแลระบบก็ไม่สามารถถอดรหัสได้เช่นกัน

มันไม่ได้ป้องกันข้อความระหว่างการรับส่ง ข้อความจะเดินทางข้ามอินเทอร์เน็ตภายใต้ TLS ที่เซิร์ฟเวอร์ทั้งสองตกลงกันไว้ เมื่อมาถึงจะอยู่ในรูปแบบข้อความธรรมดา และ Stalwart จะทำการเข้ารหัสในขณะนั้น ผู้ส่ง, ผู้ให้บริการของผู้ส่ง และจุดเชื่อมต่อใดๆ ที่ถอด TLS ออกไปแล้ว จะเห็นข้อความที่เป็นข้อความธรรมดาไปก่อนหน้านี้แล้ว

มีข้อจำกัดอีก 3 ประการที่ควรระบุให้ชัดเจน โฟลเดอร์ Sent และ Drafts ของคุณจะถูกเขียนโดยไคลเอ็นต์ของคุณ ซึ่งเป็นการเพิ่มข้อมูล (append) และ encryptOnAppend มีค่าเป็น false โดยค่าเริ่มต้น ดังนั้นข้อมูลเหล่านี้จะยังคงอยู่ในรูปแบบปกติเว้นแต่คุณจะเปลี่ยนการตั้งค่า เอกสารที่ฉันอ่านเมื่อวันที่ 28 สิงหาคม 2026 อธิบายเฉพาะเนื้อหาของข้อความเท่านั้น และไม่ได้ระบุว่าข้อมูลซองจดหมาย (envelope data), ส่วนหัว (headers) หรือรายการดัชนี (index entries) จะถูกเข้ารหัสด้วย ดังนั้นอย่าทึกทักเอาเอง นอกจากนี้ยังไม่ได้ระบุว่าข้อความที่จัดเก็บไว้ก่อนที่คุณจะอัปโหลดกุญแจจะถูกเข้ารหัสใหม่หรือไม่ ดังนั้นให้สันนิษฐานว่าไม่ถูกเข้ารหัสและควรตรวจสอบให้แน่ใจ ไม่มีการระบุว่าการค้นหาข้อความแบบเต็ม (full-text search) ยังคงทำงานได้หรือไม่กับเนื้อหาที่ถูกเข้ารหัส ให้ทดสอบเรื่องนี้กับบัญชีทดลองก่อนที่คุณจะรับปากใคร

และหากผู้ใช้ทำกุญแจส่วนตัวหาย อีเมลของพวกเขาก็จะสูญหายไปตลอดกาล โดยการออกแบบแล้วไม่มีช่องทางสำหรับการกู้คืนข้อมูล

WKD เป็นงานของเว็บเซิร์ฟเวอร์ ไม่ใช่งานของเมลเซิร์ฟเวอร์

WKD (Web Key Directory) คืออีกครึ่งหนึ่งของระบบ OpenPGP ซึ่งแก้ปัญหาคนละส่วนกัน WKD ทำหน้าที่เผยแพร่ public key ของคุณไว้ที่ URL แบบ HTTPS ภายใต้โดเมนของคุณ เพื่อให้โปรแกรมรับส่งเมลของผู้ส่งสามารถค้นหาและเข้ารหัสข้อความได้ก่อนที่ข้อความจะถูกส่งออกจากเครื่องของผู้ส่ง นี่คือการเข้ารหัสแบบ end-to-end ส่วนการเข้ารหัสข้อมูลที่จัดเก็บ (at-rest encryption) ของ Stalwart นั้นเกี่ยวข้องกับสำเนาข้อมูลที่อยู่บนดิสก์ของคุณ การตั้งค่าอย่างหนึ่งไม่ได้หมายความว่าคุณจะได้อีกอย่างหนึ่ง

Stalwart ไม่ได้ให้บริการ WKD โดยจากเอกสาร HTTP endpoints ที่อ่านเมื่อวันที่ 28 August 2026 ระบุรายการ path มาตรฐานสำหรับ jmap, caldav, carddav, oauth-authorization-server, openid-configuration, acme-challenge, mta-sts.txt, mail-v1.xml และ autoconfig แต่ไม่มี path สำหรับ openpgpkey ให้คุณให้บริการ WKD ผ่านเว็บเซิร์ฟเวอร์แบบ static ทั่วไป

ข้อกำหนดได้ระบุรูปแบบไว้ 2 วิธี วิธีขั้นสูงใช้ 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 ของชื่อผู้ใช้ (local part) ที่แปลงเป็นตัวพิมพ์เล็กแล้วเข้ารหัสด้วย 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 ที่ไคลเอนต์จะเข้ามาดึงข้อมูลโดยใช้รูปแบบ sub-domain ส่วน --install-key จะเขียนคีย์ลงในโครงสร้างไดเรกทอรีในเครื่องที่จำลองรูปแบบ WKD ไว้ โดยอยู่ภายใต้ไดเรกทอรีระดับบนสุดที่ชื่อ openpgpkey เป็นค่าเริ่มต้น (สามารถเปลี่ยนได้ด้วย -C dir) ให้คัดลอกโครงสร้างไดเรกทอรีนั้นไปยัง web root ของคุณ เพิ่มไฟล์ policy ที่จำเป็นไว้ข้างไดเรกทอรี hu (ไฟล์ว่างเปล่าก็สามารถใช้งานได้) จากนั้นใช้ curl ดึงข้อมูลจาก URL ของคุณเพื่อตรวจสอบว่าระบบส่งคืนข้อมูลคีย์กลับมาแทนที่จะเป็นข้อผิดพลาด 404

การจัดเก็บข้อมูลบน VPS เครื่องเดียว

Stalwart แบ่งการจัดเก็บข้อมูลออกเป็น 4 บทบาท ได้แก่ data store สำหรับบันทึกที่มีโครงสร้าง เช่น สถานะของกล่องจดหมาย, blob store สำหรับข้อมูลดิบของข้อความและไฟล์แนบ, search store สำหรับการทำดัชนีข้อความแบบเต็ม และ in-memory store สำหรับตัวจำกัดอัตราการใช้งาน (rate limiter), โทเค็นการยืนยันตัวตน และข้อมูลเซสชัน แต่ละส่วนสามารถกำหนดให้ชี้ไปยัง backend ที่แตกต่างกันได้ รายการที่รองรับประกอบด้วย RocksDB, FoundationDB, PostgreSQL, MySQL, SQLite, S3-compatible object storage, Azure Blob Storage, Redis, ElasticSearch และ Meilisearch

สำหรับ VPS เครื่องเดียว คำตอบนั้นสั้นและชัดเจน เอกสารระบุว่า RocksDB คือ "backend ที่แนะนำสำหรับการติดตั้ง Stalwart แบบโหนดเดียว เนื่องจากความเร็วและความน่าเชื่อถือ" Redis รองรับเฉพาะการเป็น in-memory store เท่านั้น ไม่สามารถใช้เป็น data store หรือ blob store ได้ ดังนั้นจึงไม่จำเป็นต้องมีคอนเทนเนอร์ Redis แยกต่างหากเพื่อเริ่มต้นใช้งาน คุณสามารถย้าย blob store ไปยัง S3 ในภายหลังได้หากขนาดกล่องจดหมายเกินกว่าพื้นที่ดิสก์ที่มี

การสำรองข้อมูลขึ้นอยู่กับ backend ที่เลือกใช้ สำหรับฐานข้อมูลภายนอก ให้ใช้ขั้นตอนการสำรองข้อมูลของฐานข้อมูลนั้นๆ สำหรับฐานข้อมูลแบบฝังตัว (embedded) FAQ ระบุให้คัดลอกไดเรกทอรี /var/lib/stalwart ให้ดำเนินการดังกล่าวในขณะที่หยุดการทำงานของ service แล้ว หรือทำผ่านการ snapshot ระบบไฟล์หรือโวลุ่ม การคัดลอกไฟล์ของ key-value store ในขณะที่กำลังทำงานอยู่อาจทำให้ได้ข้อมูลที่อยู่ในระหว่างการเขียน ซึ่งคุณจะไม่ทราบปัญหาจนกว่าจะพยายามกู้คืนข้อมูลนั้น

ตัวกรองสแปมที่มาแทนที่ Rspamd

การกรองทำงานภายในโพรเซสเดียวกัน จึงไม่มี daemon ตัวที่สองที่ต้องคอยดูแล สถานะของตัวจำแนกประเภท (classifier) จะถูกตั้งค่าไว้ที่ SpamClassifier singleton ภายใต้เมนู Settings, Spam Filter, Classifier โดยใช้ขั้นตอนวิธี FTRL-Proximal ร่วมกับการทำ feature hashing ซึ่ง FtrlFh เป็นค่าเริ่มต้นที่แนะนำสำหรับการติดตั้งใช้งานส่วนใหญ่ ส่วน FtrlCcfh จะเปลี่ยนไปใช้ cuckoo feature hashing เพื่อลดการชนกันของแฮช (hash collisions) ซึ่งเหมาะสำหรับการติดตั้งในระดับขนาดใหญ่ ระบบจะทำการเรียนรู้แบบต่อเนื่อง เมื่อผู้ใช้ทำเครื่องหมายข้อความว่าเป็นสแปมหรือข้อความปกติ (ham) ป้ายกำกับนั้นจะถูกนำไปใช้ประกอบการตัดสินใจในอนาคตโดยตรง

รอบตัวของตัวจำแนกประเภทจะมีระบบ DNS blocklists, greylisting, การตรวจจับฟิชชิง, spam traps และ Pyzor รวมถึงตัวเลือกในการเรียกใช้ SpamAssassin ผ่าน milter หากคุณยังมีกฎเกณฑ์ที่ต้องการใช้งานอยู่

เมื่อ mailcow ยังคงเป็นคำตอบที่เหมาะสม

Stalwart ไม่มี webmail ซึ่งถือเป็นช่องว่างที่ใหญ่ที่สุดและไม่มีตัวเลือกอื่นเทียบเคียงได้ เอกสารประกอบของ mailcow ที่อ่านเมื่อวันที่ 28 สิงหาคม 2026 ระบุส่วนประกอบไว้ 16 รายการ รวมถึง SOGo ซึ่งช่วยให้ผู้ใช้ของคุณมีกล่องจดหมายบนเบราว์เซอร์ รวมถึงอินเทอร์เฟซ CalDAV และ CardDAV มาให้พร้อมใช้งานทันที โพสต์บน roadmap ของ Stalwart เมื่อวันที่ 20 มิถุนายน 2025 ระบุว่า webmail ในตัวนั้น "อยู่ในแผนงานของเรา แต่ยังไม่ใช่ลำดับความสำคัญเร่งด่วนในขณะนี้" โดยจะสร้างด้วย Rust และ Dioxus หลังจากเวอร์ชัน 1.0 ซึ่ง "มีความเป็นไปได้สูงที่จะเกิดขึ้นในช่วงปี 2026" ณ วันที่ 28 สิงหาคม 2026 บล็อกของโครงการยังไม่มีโพสต์ประกาศเปิดตัว webmail ดังกล่าว ดังนั้นหากใช้ Stalwart คุณจะต้องติดตั้ง Roundcube ด้วยตนเอง หรือแจ้งให้ผู้ใช้ทุกคนตั้งค่าโปรแกรมรับส่งอีเมลด้วยตนเอง

Stalwart มีอินเทอร์เฟซสำหรับผู้ดูแลระบบผ่านเว็บ ดังนั้นนี่ไม่ใช่ช่องว่างที่หลายคนคาดคิด ช่องว่างที่สองคือความสมบูรณ์ของเวอร์ชัน FAQ ระบุว่า Stalwart ยังอยู่ในสถานะ 0.x ซึ่งโครงสร้างข้อมูลและการตั้งค่าอาจเปลี่ยนแปลงได้ก่อนถึงเวอร์ชัน 1.0 ซึ่งอาจจำเป็นต้องมีการย้ายข้อมูล โพสต์ของโครงการเองในเดือนมิถุนายน 2026 มีหัวข้อว่า "Zero open bug reports: The road to Stalwart 1.0" ซึ่งบอกให้คุณทราบว่าสถานะปัจจุบันเป็นอย่างไร คือใกล้ถึงจุดหมายแล้วแต่ยังไม่ถึง

ช่องว่างที่สามคือสิ่งที่ไม่มีใครระบุไว้ในรายการฟีเจอร์ Postfix, Dovecot และ Rspamd มีคำตอบที่บันทึกไว้มานานนับทศวรรษ ในเวลาตีสองที่อีเมลค้างอยู่ในคิวและผู้ใช้กำลังรอคอย การค้นหาที่พบข้อความแสดงข้อผิดพลาดที่ตรงกันนั้นมีค่ามากกว่าสถาปัตยกรรมที่สวยงาม หากคุณอยู่ในสถานการณ์นั้น คู่มือการติดตั้ง mailcow ของเราจะแนะนำคุณตลอดทั้ง stack ตั้งแต่ต้นจนจบ และจะช่วยให้คืนนั้นของคุณสั้นลง

เลือก Stalwart เมื่อคุณต้องการ binary ไฟล์เดียว, ไฟล์ config ไฟล์เดียว และ JMAP และคุณสะดวกใจที่จะเป็นผู้ใช้งานกลุ่มแรกๆ เลือก mailcow เมื่อคุณต้องการ webmail ในวันนี้และต้องการแหล่งข้อมูลคำตอบที่มีอยู่จำนวนมาก

การย้ายอีเมลที่มีอยู่เข้ามา

วิธีการทั่วไปคือการใช้ IMAP ไปยัง IMAP ด้วยเครื่องมือ imapsync ซึ่งไม่ขึ้นอยู่กับว่าปลายทางทั้งสองฝั่งใช้ซอฟต์แวร์ใด ให้ทำการทดสอบแบบ 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 "ไม่ดำเนินการจริง แต่จะแสดงผลลัพธ์ว่าจะเกิดอะไรขึ้นบ้าง" ดังนั้นให้อ่านผลลัพธ์ดังกล่าวก่อนที่จะนำ flag นี้ออก ไฟล์รหัสผ่านแต่ละไฟล์จะเก็บรหัสผ่านไว้ที่บรรทัดแรก ดังนั้นให้ chmod 600 ทั้งสองไฟล์และลบทิ้งหลังจากใช้งานเสร็จสิ้น

Stalwart ยังมาพร้อมกับเครื่องมือใหม่ๆ ที่คู่มือจากบุคคลที่สามส่วนใหญ่ยังไม่ได้อัปเดตตาม บล็อกของ Stalwart ได้จัดทำเอกสารเกี่ยวกับ Vandelay ซึ่งเป็นเครื่องมือสำหรับนำเข้าและส่งออกข้อมูลผ่าน JMAP (29 พฤษภาคม 2026) และพร็อกซีสำหรับการย้ายข้อมูลที่ช่วยให้สามารถอัปเกรดได้โดยไม่มี downtime (10 มิถุนายน 2026) โปรดอ่านเอกสารทั้งสองฉบับก่อนวางแผนการย้ายข้อมูลขนาดใหญ่ เนื่องจากเป็นข้อมูลที่ใหม่กว่าเนื้อหาเกือบทั้งหมดที่คุณจะพบจากแหล่งอื่น

รูปแบบความล้มเหลวและข้อความที่คุณจะพบ

อินเทอร์เฟซผู้ดูแลระบบไม่โหลด FAQ ได้ระบุถึงปัญหานี้โดยตรง เนื่องจากชุดไฟล์ web interface จะถูกดาวน์โหลดจาก GitHub ในการรันครั้งแรก ดังนั้นเซิร์ฟเวอร์ที่ไม่มีการเชื่อมต่อ HTTPS ขาออกไปยัง github.com จะทำให้บริการรันอยู่แต่แสดงหน้าว่างเปล่า ให้ตรวจสอบด้วย curl -sI https://github.com/stalwartlabs/webui/releases/latest/ จากตัวเซิร์ฟเวอร์ สาเหตุทั่วไปอื่นๆ ที่ระบุไว้คือการใช้ scheme HTTP หรือ HTTPS ไม่ตรงกัน และการตั้งค่า reverse proxy ที่ไม่ได้ส่งต่อ client IP

ไม่มีรหัสผ่าน bootstrap ใน log รหัสผ่านจะถูกพิมพ์ออกมาเพียงครั้งเดียวในตอนเริ่มต้นขณะอยู่ในโหมด bootstrap หากบริการมีการรีสตาร์ทหลังจากนั้น ให้ขยายช่วงเวลาการดู log ด้วย sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode' หากรหัสผ่านหายไปจริงๆ ให้ตั้งค่า STALWART_RECOVERY_ADMIN ใน /etc/stalwart/stalwart.env แล้วรีสตาร์ทบริการ

การส่งต่อผ่าน local proxy ถูกปฏิเสธ บันทึกการเปลี่ยนแปลงของรุ่น v0.16.19 ได้ระบุถึงการแก้ไขปัญหาเส้นทาง relay ที่ถูกปฏิเสธด้วย host resolves loopback address หากคุณพบข้อความดังกล่าวแสดงว่าคุณกำลังรัน build รุ่นเก่าอยู่ ให้ทำการอัปเดตเวอร์ชันแทนการหาวิธีเลี่ยงปัญหา

บริการไม่ยอมเริ่มทำงานหลังจากที่คุณเขียน unit ของตัวเอง หากไม่มี AmbientCapabilities=CAP_NET_BIND_SERVICE ผู้ใช้ stalwart จะไม่สามารถ bind พอร์ต 25, 443, 465 หรือ 993 ได้ และการเริ่มต้นจะล้มเหลวที่ listener แรก ให้คัดลอกบรรทัด capability จาก unit ที่ตัวติดตั้งสร้างขึ้นมา

ใบรับรองไม่ถูกออกให้ การตรวจสอบแบบ HTTP-01 จำเป็นต้องเข้าถึงพอร์ต 80 ได้และพอร์ตต้องว่าง ส่วน TLS-ALPN-01 จำเป็นต้องให้ Stalwart เป็นผู้ตอบรับ TLS handshake บนพอร์ต 443 ด้วยตัวเอง หากมีโปรแกรมอื่นบนเครื่องใช้งานพอร์ตใดพอร์ตหนึ่งอยู่ ACME จะล้มเหลวไปเรื่อยๆ โดยเงียบๆ ในขณะที่ส่วนอื่นของระบบยังดูปกติอยู่

FAQ

Stalwart สามารถแทนที่ Postfix, Dovecot และ Rspamd บน VPS เครื่องเดียวได้หรือไม่?

ได้ Stalwart เป็น Rust binary เพียงตัวเดียวที่รองรับโปรโตคอล SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV และ WebDAV อีกทั้งยังมีระบบกรองสแปม, ระบบจัดเก็บข้อความ และ ACME client ในตัว คุณจะมีเพียง systemd unit เดียวและไฟล์คอนฟิกเดียวที่ /etc/stalwart/config.json แทนที่จะต้องจัดการ daemon สี่ตัวและส่วนเชื่อมต่อระหว่างกัน สิ่งที่ Stalwart ไม่สามารถแทนที่ได้คือ DNS zone ของคุณหรือนโยบายการเปิดพอร์ต 25 ของผู้ให้บริการ VPS ซึ่งเป็นปัจจัยชี้ขาดว่าการโฮสต์อีเมลด้วยตนเองจะสำเร็จหรือไม่

Stalwart mail server ต้องการ RAM เท่าใด?

หน้าความต้องการของระบบของ Stalwart ซึ่งอ่านเมื่อวันที่ 28 สิงหาคม 2026 ระบุว่าใช้ RAM ประมาณ 100 MB ในสถานะ idle และแนะนำ RAM 1 GB สำหรับการใช้งานขนาดเล็กที่มีผู้ใช้ 5 ถึง 10 คน การตั้งค่าที่มีผู้ใช้ประมาณ 5 คนและมีการรับส่งข้อมูลต่ำสามารถทำงานได้บน CPU 1 คอร์ ค่าเริ่มต้นของจำนวนการเชื่อมต่อพร้อมกันคือ 8,192 รายการสำหรับทุกบริการ ซึ่งสามารถปรับแต่งได้ ดังนั้นขีดจำกัดจะเพิ่มขึ้นตามจำนวนการเชื่อมต่อและปริมาณอีเมล ไม่ใช่แค่จำนวนผู้ใช้เพียงอย่างเดียว ไม่มีการระบุขนาดดิสก์ขั้นต่ำไว้ ดังนั้นควรเลือกขนาดดิสก์ให้เหมาะสมกับปริมาณอีเมลที่คุณจัดเก็บ

การเปลี่ยนมาใช้ Stalwart จะช่วยเพิ่มอัตราการส่งอีเมลถึงผู้รับหรือไม่?

ไม่ อัตราการส่งอีเมลถึงผู้รับขึ้นอยู่กับว่าพอร์ต 25 ขาออกบน VPS ของคุณเปิดอยู่หรือไม่, การตั้งค่า reverse DNS บน IP ของคุณ และการตั้งค่า SPF, DKIM และ DMARC บนโดเมนของคุณ Stalwart รองรับ DANE, MTA-STS และ SMTP TLS reporting และสามารถเผยแพร่นโยบาย MTA-STS ให้คุณได้ แต่สิ่งเหล่านี้ควบคุมความปลอดภัยในการรับส่งข้อมูล ไม่ใช่การที่เครือข่ายปลายทางจะเชื่อถือที่อยู่ของคุณหรือไม่ ให้ทดสอบพอร์ต 25 ด้วย nc -vz -w 5 alt1.aspmx.l.google.com 25 ก่อนที่คุณจะติดตั้งซอฟต์แวร์ใดๆ

Stalwart มี webmail มาให้ด้วยหรือไม่?

ณ วันที่ 28 สิงหาคม 2026 ยังไม่มี Stalwart มีหน้าเว็บสำหรับจัดการระบบ (web admin interface) ซึ่งเป็นคนละส่วนกัน โพสต์บน roadmap ของโครงการเมื่อวันที่ 20 มิถุนายน 2025 ระบุว่ามีแผนจะพัฒนา webmail client หลังจากเวอร์ชัน 1.0 โดยเขียนด้วย Rust และ Dioxus ซึ่ง "น่าจะเป็นช่วงปี 2026" แต่ในบล็อกของโครงการยังไม่มีประกาศเปิดตัว หากผู้ใช้ของคุณต้องการใช้งานกล่องจดหมายผ่านเบราว์เซอร์ในตอนนี้ ให้ติดตั้ง Roundcube ควบคู่กันไปหรือใช้ stack ที่รวม SOGo มาให้

การเข้ารหัสข้อมูลที่จัดเก็บ (encryption at rest) ของ Stalwart ป้องกันอะไรได้บ้าง?

Stalwart จะเข้ารหัสข้อความของผู้ใช้แต่ละคนด้วย public key แบบ OpenPGP หรือ S/MIME ของผู้ใช้คนนั้นก่อนเขียนลงดิสก์ ดังนั้นหากดิสก์ถูกขโมย, ข้อมูลสำรองถูกขโมย หรือผู้ดูแลระบบเข้ามาอ่านไฟล์ในที่จัดเก็บ ก็จะไม่สามารถกู้คืนเนื้อหาได้ นี่ไม่ใช่การเข้ารหัสแบบ end-to-end: ข้อความจะมาถึงในรูปแบบข้อความปกติ (plain text) และถูกเข้ารหัสเมื่อส่งถึงปลายทาง ดังนั้นทุกจุดที่ข้อความผ่านมาก่อนหน้านั้นจะสามารถอ่านเนื้อหาได้ ค่าเริ่มต้นของ encryptOnAppend คือ false ดังนั้นข้อความในโฟลเดอร์ Sent และ Drafts ที่เขียนโดยไคลเอนต์ของคุณจะยังคงอยู่ในรูปแบบปกติเว้นแต่คุณจะเปลี่ยนการตั้งค่า เอกสารระบุเพียงเนื้อหาของข้อความเท่านั้นและไม่ได้กล่าวถึง metadata, รายการดัชนี (index entries) หรือการเข้ารหัสอีเมลที่จัดเก็บไว้ก่อนที่จะอัปโหลด key ดังนั้นควรตรวจสอบสิ่งเหล่านี้ด้วยตนเองแทนการคาดเดาเอาเอง

#stalwart#email#self-hosting#mail-server#smtp