เมื่อโฮสต์เอง Listmonk จะรันบน VPS ที่คุณจ่ายค่าใช้จ่ายอยู่แล้ว ค่าส่งคิดตามที่ SMTP relay ของคุณเรียกเก็บต่ออีเมลทุกหนึ่งพันฉบับ จำนวนผู้รับข่าวสารไม่เปลี่ยนตัวเลขทั้งสองนั้น นี่คือความแตกต่างเชิงโครงสร้างที่ทำให้การโฮสต์เองคุ้มกับเวลาที่ใช้ตั้งค่า เมื่อคุณโตเกินกว่าแพ็กเกจฟรีแบบจัดการให้
Listmonk เป็นโปรแกรมจัดการนิวส์เลตเตอร์โอเพนซอร์สที่เขียนด้วยภาษา Go คุณได้ผู้รับข่าวสาร รายชื่อ และแคมเปญแบบไม่จำกัด ในราคาแค่ค่า VPS บวกบัญชี SMTP relay มีสิ่งหนึ่งที่ต้องเข้าใจให้ชัดก่อนแตะคำสั่งใดๆ: Listmonk จัดการทุกอย่างยกเว้นการส่งจริง ส่วนว่าอีเมลของคุณจะเข้าถึงกล่องจดหมายหรือลงโฟลเดอร์สแปม ขึ้นอยู่กับ SMTP relay ที่คุณตั้งค่าและ DNS records ที่คุณกำหนดบนโดเมนผู้ส่ง
คู่มือนี้ครอบคลุมอะไรบ้าง
- ติดตั้ง Listmonk และ PostgreSQL ด้วย Docker Compose โดยมี Nginx (หรือ Caddy) เป็น reverse proxy พร้อม HTTPS
- เลือก SMTP relay ที่เหมาะกับปริมาณและงบประมาณของคุณ (Amazon SES, Postmark, Brevo หรืออื่นๆ)
- ตั้งค่า SPF, DKIM และ DMARC บนโดเมนผู้ส่งของคุณ
- หลีกเลี่ยงสี่รูปแบบความล้มเหลวในการใช้งานจริงที่มักไม่แสดง error ที่ชัดเจน
- เวลาที่ใช้โดยประมาณ: 30 นาที หากคุณมี VPS และโดเมนพร้อมแล้ว
- นอกขอบเขต: drip automation, transactional email, การตั้งค่าแบบหลายอินสแตนซ์ (ดู FAQ)
เมื่อไหร่ที่ Listmonk ไม่ใช่เครื่องมือที่เหมาะสม
Listmonk เป็นคำตอบที่ถูกต้องสำหรับสถานการณ์เฉพาะอย่าง หากสถานการณ์ของคุณต่างออกไป ก็มีคำตอบที่ดีกว่า
ปริมาณต่ำกว่าราว 10K อีเมลต่อเดือน แพ็กเกจฟรีแบบจัดการให้ของ Brevo หรือ Mailchimp อาจมีต้นทุนรวมต่ำกว่า VPS บวก SMTP relay ที่ระดับปริมาณนี้ การโฮสต์เองเริ่มคุ้มเมื่อคุณข้ามช่วงนั้นไป ลองคำนวณตัวเลขกับจำนวนผู้รับข่าวสารจริงและความถี่ในการส่งของคุณก่อนติดตั้ง
ทีมที่ไม่ใช่สายเทคนิค Mailchimp และ Brevo มี UI ที่ดีกว่าจริงๆ สำหรับคนที่ไม่ได้ทำงานในเทอร์มินัล Listmonk สันนิษฐานว่ามีคนในทีมที่สามารถ SSH เข้าเซิร์ฟเวอร์ อ่าน Docker logs และตีความการแพร่กระจายของ DNS ได้ หากไม่มีคนแบบนั้น บริการแบบจัดการให้คือตัวเลือกที่ถูกต้อง
ต้องการ workflow แบบอัตโนมัติ Listmonk ส่งแคมเปญ มันไม่รองรับ drip sequences อีเมลที่ทริกเกอร์ตามพฤติกรรม หรือเครื่องมือสร้าง workflow แบบภาพ หากคุณต้องการสิ่งเหล่านั้น ให้รัน Mautic หรือเชื่อม Listmonk เข้ากับ n8n สำหรับชั้นการทำงานอัตโนมัติ
รายชื่อผู้รับข่าวสารที่อ่อนไหวต่อ GDPR หากผู้รับข่าวสารของคุณส่วนใหญ่อยู่ใน EU หรือรายชื่อของคุณอยู่ภายใต้กฎ data-residency ของ GDPR ให้รัน Listmonk ในดาต้าเซ็นเตอร์ในยุโรป เรามีโลเคชัน Frankfurt และ London ที่ตรงตามข้อกำหนดการพำนักข้อมูลใน EU
สิ่งที่คุณต้องมีก่อนเริ่ม
Listmonk บวก PostgreSQL บวกภาระงานคิวระดับปานกลาง ต้องการ RAM อย่างน้อย 2 GB เป็นพื้นฐาน 4 GB คือเป้าหมายที่สบายๆ สำหรับการใช้งานจริง
ฮาร์ดแวร์ สำหรับรายชื่อส่วนตัวที่ต่ำกว่า 50K อีเมลต่อเดือน VPS ที่มี 2 vCPU, RAM 4 GB และพื้นที่เก็บข้อมูล NVMe 120 GB ก็เพียงพอ รายชื่อที่กำลังเติบโตที่ 200K+ ต่อเดือน ต้องการ 4 vCPU และ RAM 8 GB เรารันการตั้งค่า Compose นี้บน VPS ขนาด 4 GB ใน Frankfurt เลือกโลเคชันที่ใกล้ผู้รับข่าวสารของคุณหากทำได้ ความหน่วงในการส่งไม่ค่อยสำคัญ แต่ความตอบสนองของหน้าแอดมินสำคัญ
โดเมน โดเมนที่ชี้ไปยัง VPS ของคุณผ่าน A record ใช้ซับโดเมนสำหรับหน้าแอดมิน เช่น mail.example.com. โดเมนผู้ส่งและซับโดเมนแอดมินสามารถเป็น root domain เดียวกันได้
บัญชี SMTP relay ยังอย่าเพิ่งสร้าง การเลือก relay เป็นการตัดสินใจที่ส่งผลมากที่สุดในคู่มือนี้ และขึ้นอยู่กับปริมาณของคุณ ข้ามไปยังหัวข้อ "การเลือก SMTP Relay ของคุณ" เลือกผู้ให้บริการ แล้วกลับมาที่นี่พร้อม SMTP host, port, username และ password ในมือ
ซอฟต์แวร์บน VPS Ubuntu 22.04 LTS หรือ 24.04 LTS Docker Engine 24.0 ขึ้นไปพร้อมปลั๊กอิน Docker Compose UFW หรือไฟร์วอลล์เทียบเท่าที่เปิดพอร์ต 22, 80 และ 443 การเข้าถึง SSH ในฐานะผู้ใช้ sudo ที่ไม่ใช่ root
ติดตั้ง Listmonk ด้วย Docker Compose

สร้างไดเรกทอรีสำหรับการติดตั้ง จากนั้นวางไฟล์ docker-compose.yml ที่มีสองเซอร์วิส: postgres สำหรับฐานข้อมูล และ listmonk สำหรับแอปพลิเคชัน ทั้งคู่จะรีสตาร์ทเมื่อล้มเหลว Listmonk ผูกกับ 127.0.0.1 เพื่อให้ reverse proxy เป็นสิ่งเดียวที่เข้าถึงมันได้
ไฟล์ Docker Compose
I'm ready to translate to Thai. However, the text you've provided appears incomplete: "Here is the"
Could you please provide the full English text you'd like me to translate? docker-compose.yml. ตรวจสอบ image tags และชื่อ environment variable ที่ถูกต้องกับ เอกสารการติดตั้ง Listmonk อย่างเป็นทางการ. พวกมันอัปเดตในทุกรีลีส
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
container_name: listmonk-postgres
restart: unless-stopped
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: listmonk
volumes:
- listmonk-postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U listmonk"]
interval: 10s
timeout: 5s
retries: 6
app:
image: listmonk/listmonk:latest
container_name: listmonk-app
restart: unless-stopped
# Bind to loopback only. The reverse proxy is the public entrypoint.
ports:
- "127.0.0.1:9000:9000"
depends_on:
postgres:
condition: service_healthy
environment:
LISTMONK_app__address: "0.0.0.0:9000"
LISTMONK_db__host: postgres
LISTMONK_db__port: 5432
LISTMONK_db__user: listmonk
LISTMONK_db__password: ${POSTGRES_PASSWORD}
LISTMONK_db__database: listmonk
volumes:
listmonk-postgres:
สร้าง .env ไฟล์ที่มี POSTGRES_PASSWORD= ตั้งค่าให้เป็นสตริงสุ่มยาวๆ จากนั้นเริ่ม stack และรันการติดตั้งฐานข้อมูลครั้งเดียว:
# Pull images and start the database first
docker compose up -d postgres
# Run the install step (creates schema and the first admin user)
docker compose run --rm app ./listmonk --install --idempotent --yes
# Start the application
docker compose up -d
เวอร์ชัน --install คำสั่งจะถามอีเมลและรหัสผ่านของแอดมิน บันทึกไว้ ตรวจสอบว่าทั้งสองคอนเทนเนอร์กำลังรัน:
docker compose ps
ผลลัพธ์ที่คาดหวัง: เห็นสองเซอร์วิส ทั้งคู่มีสถานะ Up แถว postgres ควรแสดง (healthy)
เวอร์ชัน 127.0.0.1:9000 การผูกนี้ตั้งใจทำ Listmonk ไม่มีตัวจำกัดอัตราการยืนยันตัวตนในตัว และไม่มี IP allowlisting การเปิดพอร์ต 9000 สู่อินเทอร์เน็ตสาธารณะหมายความว่าใครก็ตามบนโลกนี้สามารถเข้าหน้าล็อกอินแอดมินของคุณได้ reverse proxy คือสิ่งที่ทำให้ล็อกอินนั้นเข้าถึงได้ผ่าน HTTPS เท่านั้น
Nginx Reverse Proxy และ SSL
ติดตั้ง Nginx และ Certbot จาก repository ของ Ubuntu สร้าง site config ที่ /etc/nginx/sites-available/listmonk พร้อม proxy headers ที่ Listmonk ต้องใช้เพื่อสร้างลิงก์แคมเปญที่ถูกต้อง:
# /etc/nginx/sites-available/listmonk
server {
listen 80;
server_name mail.example.com;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Listmonk streams campaign progress over WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
ทำ symlink ไปยัง sites-enabled ทดสอบ config รีโหลด Nginx จากนั้นออกใบรับรอง:
sudo ln -s /etc/nginx/sites-available/listmonk /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d mail.example.com
Certbot จะเขียน server block ใหม่ให้ฟังที่ 443 ด้วยใบรับรองใหม่ และเพิ่ม redirect จาก HTTP เป็น HTTPS ตรวจสอบ:
curl -I https://mail.example.com
ผลลัพธ์ที่คาดหวัง: HTTP/2 200 พร้อม strict-transport-security header ที่ถูกต้อง หากคุณเจอ redirect loop ให้ตรวจสอบว่า X-Forwarded-Proto header ถูกตั้งค่าใน Nginx config ข้างบนแล้ว เก้าในสิบครั้ง loop นั้นเกิดจาก header ตัวนี้
หาก Listmonk เป็นสิ่งเดียวบน VPS นี้ ให้ใช้ Caddy แทน Caddyfile มีแค่สามบรรทัดและจัดการการต่ออายุใบรับรองได้โดยไม่ต้องใช้ cron job:
mail.example.com {
reverse_proxy 127.0.0.1:9000
}
แก้ไข Message-ID Header
โดยปริยาย Listmonk ใช้ system hostname ใน Message-ID header ขาออก หาก hostname ของ VPS เป็น localhost หรืออะไรก็ตามที่ไม่ใช่ FQDN ที่ถูกต้อง Listmonk จะส่ง Message-ID: <[email protected]>. ตัวกรองสแปมที่ Gmail และ Outlook จะตั้งธงสิ่งนี้ทันที เรื่องนี้มีบันทึกไว้ใน Cloudron Forum thread 15410.
การแก้ไขคือหนึ่งบรรทัดใน config.tomlของ Listmonk สำหรับการติดตั้งใหม่ สร้างไฟล์ผ่าน docker compose run --rm app ./listmonk --new-config. จากนั้นตั้งค่า:
[app]
hostname = "mail.example.com"
รีสตาร์ทคอนเทนเนอร์แอปหลังแก้ไข:
docker compose restart app
ทำสิ่งนี้ก่อนที่คุณจะส่งแคมเปญแม้แต่ฉบับเดียว รายชื่อที่ปนเปื้อนด้วย Message-ID localhost.localdomain กู้คืนยากกว่ารายชื่อที่เริ่มต้นมาสะอาด
คำแนะนำมืออาชีพ
หากคุณอยากข้ามการตั้งค่า Compose ลองดู Listmonk VPS แบบคลิกเดียว ของเราเพื่อติดตั้ง Listmonk ภายในไม่กี่นาทีด้วยคลิกเดียว อินสแตนซ์มาพร้อม PostgreSQL ที่ตั้งค่าไว้แล้ว คุณยังต้องตั้งค่า SMTP relay และเพิ่ม DNS records ของคุณ ขั้นตอนเหล่านั้นไม่ใช่ทางเลือก ไม่ว่าคุณจะติดตั้งด้วยวิธีใดก็ตาม
การเลือก SMTP Relay ของคุณ

การส่งทั้งหมดเกิดขึ้นผ่าน relay ที่คุณตั้งค่า ชื่อเสียง IP ของ relay, rate limits และการจัดการ bounce คือสิ่งที่กำหนดว่าอีเมลของคุณจะเข้าถึงกล่องจดหมายหรือลงโฟลเดอร์สแปม
นี่คือการเปรียบเทียบเชิงฟังก์ชัน ราคาและขีดจำกัดของแพ็กเกจฟรีเปลี่ยนแปลงได้ ตรวจสอบแต่ละอย่างบนหน้าราคาอย่างเป็นทางการของผู้ให้บริการก่อนตัดสินใจ
| ผู้ให้บริการ | โครงสร้างต้นทุน | Bounce webhooks | เหมาะสำหรับ |
|---|---|---|---|
| Amazon SES | คิดต่ออีเมล ต่ำมากเมื่อปริมาณสูง | ใช่ ผ่าน SNS | ต้นทุนเมื่อปริมาณสูง อยู่บน AWS อยู่แล้ว |
| Postmark | ค่าฐานรายเดือนบวกค่าต่ออีเมล | ใช่ มีในตัว | เน้นการส่งถึงปลายทาง ชื่อเสียงด้าน transactional |
| Brevo | แพ็กเกจฟรีสำหรับปริมาณต่ำ แพ็กเกจแบบเสียเงินสำหรับปริมาณที่สูงขึ้น | ได้ | ปริมาณต่ำพร้อมเส้นทางอัปเกรด |
| Mailgun | คิดราคาต่ออีเมล | ไม่มี webhook endpoint ในตัว ใช้ generic bounce API หากจำเป็น | คุ้นเคยสำหรับนักพัฒนา |
นั่นเป็นเพียงภาพรวมคร่าวๆ ของแต่ละ SMTP relay ตอนนี้เราจะลงรายละเอียดของแต่ละตัว
Amazon SES (จุดเริ่มต้นที่แนะนำ)
SES เป็นตัวเลือกที่ถูกที่สุดเมื่อปริมาณสูง และเป็นที่พูดถึงมากที่สุดในคอมมิวนิตี้ Listmonk การตั้งค่ามีขั้นตอนมากกว่า Postmark หรือ Brevo แต่ส่วนต่างของต้นทุนต่ออีเมลมากพอที่ปริมาณจริงใดๆ จะคุ้มกับงานที่ทำ
ตั้งค่าได้ในสามขั้นตอน ขั้นแรก สร้าง IAM user ด้วย AmazonSESFullAccess policy (หรือ custom policy ที่แคบกว่าด้วย ses:SendRawEmail และ ses:GetSendQuotaเท่านั้น) ขั้นที่สอง ยืนยันโดเมนผู้ส่งของคุณในคอนโซล SES SES จะแนะนำคุณผ่าน DKIM CNAMEs ที่ต้องเพิ่ม ขั้นที่สาม สร้าง SMTP credentials จากแผงตั้งค่า SES SMTP สิ่งเหล่านี้ไม่ใช่ AWS access keys ของคุณ SES สร้าง username และ password เฉพาะสำหรับ SMTP แยกต่างหากเมื่อคุณคลิก "Create SMTP credentials"
ในหน้าแอดมินของ Listmonk ที่ Settings → SMTP เพิ่มเซิร์ฟเวอร์ใหม่ด้วย:
- เจ้าภาพ:
email-smtp.<region>.amazonaws.com(ใช้ภูมิภาค SES ที่คุณยืนยันโดเมนไว้) - Port: 587
- Auth protocol: LOGIN
- TLS: STARTTLS
- Username และ password: SMTP credentials ที่ SES สร้างให้
SES ต้องการ STARTTLS บนพอร์ต 587 หากคุณตั้ง TLS เป็น none หรือเลือกพอร์ต 465, Listmonk จะเชื่อมต่อ SES จะตอบกลับ 530 Must issue a STARTTLS command first, และการทดสอบ SMTP credential ในหน้าแอดมินอาจยังแสดงว่าสำเร็จ ส่งอีเมลทดสอบจริงไปยังกล่องจดหมายส่วนตัวที่คุณควบคุมได้ ก่อนรันแคมเปญใดๆ
บัญชี SES ใหม่เริ่มต้นในโหมด sandbox ในโหมด sandbox คุณส่งได้เฉพาะไปยังที่อยู่อีเมลที่ยืนยันแล้ว ซึ่งไม่มีประโยชน์สำหรับรายชื่อผู้รับข่าวสาร เปิด support ticket จากคอนโซล SES เพื่อขอสิทธิ์เข้าถึงระดับ production การอนุมัติมักใช้เวลาหนึ่งวันทำการ
Postmark (ทางเลือกที่เน้นการส่งถึงปลายทาง)
Postmark มีค่าใช้จ่ายต่ออีเมลสูงกว่า SES แต่มี bounce webhook ในตัว และมีชื่อเสียงด้านอัตราการเข้ากล่องจดหมายที่สูงพร้อมนโยบายผู้ส่งที่เข้มงวด คุ้มหากนิวส์เลตเตอร์ของคุณสำคัญต่อธุรกิจ หรือคุณไม่อยากจัดการการอนุมัติจาก sandbox ไป production ของ SES
การตั้งค่า Listmonk มีรูปแบบเดียวกับ SES: host, port 587, STARTTLS, credentials จากแผง API tokens ของเซิร์ฟเวอร์ Postmark ยืนยันโดเมนผู้ส่งของคุณในการตั้งค่า signature ของ Postmark เพิ่ม DKIM records ที่ Postmark สร้างให้ แล้วคุณก็พร้อมส่ง
เลือก Postmark เมื่อการส่งถึงปลายทางสำคัญกว่าต้นทุนต่ออีเมล เลือก SES เมื่อปริมาณสำคัญกว่าการคอยจับมือสอน
คำเตือนเกี่ยวกับการทดสอบ SMTP credential การทดสอบการเชื่อมต่อในหน้าแอดมินของ Listmonk รายงานว่าสำเร็จเสมอ แม้แต่กับ credentials ที่ไม่ถูกต้อง เรื่องนี้มีบันทึกไว้ใน GitHub issues ไม่กี่อัน. อย่าเชื่อมัน หลังตั้งค่า relay ใดๆ ส่งแคมเปญไปยังผู้รับข่าวสารทดสอบเพียงคนเดียว และยืนยันการรับในกล่องจดหมายเป้าหมายก่อนส่งไปยังรายชื่อเต็ม
หลีกเลี่ยง Mailersend สำหรับการส่งแคมเปญจำนวนมาก ขีดจำกัด 5 อีเมลต่อการเชื่อมต่อของมันทำให้เกิด error 421 Service not available ที่ Listmonk บันทึกว่าส่งแล้วแม้การส่งจะล้มเหลว แคมเปญดูเหมือนสำเร็จใน Listmonk แต่ทิ้งข้อความส่วนใหญ่ไปโดยไม่เตือน
ทำให้อีเมลเข้าถึงปลายทางจริง: SPF, DKIM และ DMARC

นี่คือ DNS records สามรายการบนโดเมนผู้ส่งของคุณ ที่บอกเซิร์ฟเวอร์เมลผู้รับว่าโดเมนของคุณอนุญาตให้ relay นี้ส่งในนามของคุณ ข้ามอันใดอันหนึ่งไป แล้วการส่งของคุณส่วนสำคัญจะลงสแปมเมื่อปริมาณสูง ไม่ว่า relay หรือเนื้อหาของคุณจะสะอาดแค่ไหน เพิ่มมันที่ผู้ให้บริการ DNS ของคุณก่อนส่งแคมเปญแรก
SPF Record
SPF อนุญาตให้ IP หรือบริการส่งเฉพาะส่งอีเมลแทนโดเมนของคุณ เพิ่ม TXT record เดียวที่ root ของโดเมนผู้ส่งของคุณพร้อม include สำหรับ relay ของคุณ สำหรับ SES record จะมีหน้าตาแบบนี้:
v=spf1 include:amazonses.com ~all
สำหรับ Postmark ให้แทนที่ include ด้วย include:spf.mtasv.net. ตรวจสอบเอกสาร SPF อย่างเป็นทางการของ relay ของคุณเสมอเพื่อหาค่า include ที่ถูกต้อง มันเปลี่ยนตามผู้ให้บริการ และบางครั้งตามภูมิภาค
โดเมนหนึ่งมี SPF record ได้เพียงรายการเดียว หากคุณมีอยู่แล้วสำหรับบริการอื่น (Google Workspace, Microsoft 365) ให้รวม include เข้ากับ record ที่มีอยู่แทนการเพิ่มรายการที่สอง
DKIM
DKIM แนบลายเซ็นเข้ารหัสกับอีเมลขาออกที่เซิร์ฟเวอร์ผู้รับยืนยันกับ public key ใน DNS ของคุณ relay ของคุณสร้างคู่คีย์ คุณเพิ่ม public key เป็น TXT record ที่ซับโดเมน selector (เช่น sel1._domainkey.example.com) ด้วยค่าที่ถูกต้องตามที่ relay ให้มา
Listmonk ไม่จัดการการลงนาม DKIM relay เป็นคนทำ ไม่มีการตั้งค่า DKIM เฉพาะของ Listmonk ทำตามตัวช่วยตั้งค่า DKIM ของ relay ของคุณ เพิ่ม records ที่มันให้มา และรอการแพร่กระจายของ DNS (มักน้อยกว่า 30 นาที บางครั้งไม่กี่ชั่วโมง)
DMARC
DMARC บอกเซิร์ฟเวอร์ผู้รับว่าจะทำอย่างไรกับอีเมลที่ไม่ผ่านการตรวจสอบ SPF หรือ DKIM เริ่มในโหมดตรวจสอบด้วย p=none เพื่อให้คุณเห็นความล้มเหลวในรายงานรวมโดยไม่กระทบการส่งถึงปลายทาง ขณะที่คุณแก้ไขการตั้งค่าที่ผิดพลาด เพิ่ม TXT record ที่ _dmarc.example.com:
v=DMARC1; p=none; rua=mailto:[email protected]
หลังจากรายงานสะอาดสองหรือสามสัปดาห์ ให้เข้มงวดนโยบายเป็น p=quarantine or p=reject. อย่าข้ามช่วงตรวจสอบ การพิมพ์ผิดใน SPF include ของคุณบวกกับ p=reject ในวันแรก จะลบล้างอีเมลที่ถูกต้องของคุณเองโดยไม่มีสัญญาณว่ามีอะไรผิดพลาด
List-Unsubscribe header (RFC 8058) ถูกสร้างโดยอัตโนมัติโดย Listmonk ยืนยันว่ามันถูกเปิดใช้งานที่ Settings → General Gmail และ Apple Mail แสดง header นี้เป็นตัวเลือกยกเลิกการสมัครด้วยคลิกเดียว ซึ่งปกป้องชื่อเสียงผู้ส่ง
อะไรที่พังจริงเมื่อใช้งานจริง
สี่รูปแบบความล้มเหลวที่จะไม่ปรากฏจนกว่าคุณจะส่งแคมเปญจริงครั้งแรก จับมันให้ได้ก่อนที่ผู้รับข่าวสารของคุณจะเจอ
ปัญหาที่ 1: อัตรา bounce ไม่ตรงกับตัวเลขของ relay ของคุณ Listmonk ประมวลผล bounce โดยอ่านที่อยู่อีเมล bounce ที่กำหนดผ่าน POP3 และลบทุกข้อความที่อ่าน ซึ่งรวมถึงข้อความตอบกลับอัตโนมัติเวลาลาพักร้อน ใบตอบรับการส่ง และการแจ้งไม่อยู่ออฟฟิศ ทั้งหมดถูกจัดประเภทเป็น bounce relay ของคุณนับเฉพาะความล้มเหลวในการส่งจริงที่เซิร์ฟเวอร์เมลผู้รับส่งกลับมา หาก SES รายงาน 0.6% และ Listmonk รายงาน 4% นี่คือช่องว่างนั้น. การแก้ไขคือตั้งค่า bounce webhook callbacks แทน POP3 สำหรับ SES ใช้ SNS เพื่อส่งการแจ้ง bounce ไปยัง webhook endpoint ของ Listmonk สำหรับ Postmark ชี้ webhook ในตัวของมันไปที่ endpoint เดียวกัน bounce แบบ webhook แม่นยำ ส่วน bounce แบบ POP3 ทำให้ตัวเลขพอง
ปัญหาที่ 2: การทดสอบ SMTP credential บอกว่าสำเร็จทั้งที่ผิด ตามที่กล่าวในหัวข้อ relay การทดสอบการเชื่อมต่อรายงานว่าสำเร็จเสมอไม่ว่า credential จะถูกต้องหรือไม่ อย่าเชื่อมัน ส่งอีเมลทดสอบจริงเสมอหลังตั้งค่าหรือเปลี่ยนการตั้งค่า SMTP ใดๆ
ปัญหาที่ 3: แคมเปญหยุดกลางคันโดยไม่มี error Listmonk ทำเครื่องหมายแคมเปญว่า Finished แม้เมื่อมีผู้รับข่าวสารเพียง 60% ที่ได้รับอีเมล การส่งที่เหลือถูกปฏิเสธโดย relay หรือถูกจำกัดที่ชั้นเครือข่ายของ VPS และ Listmonk ไม่แสดงทั้งสองอย่างเป็น error ระดับแคมเปญ (Cloudron Forum thread 13165). หากแคมเปญแสดงจำนวนการส่งน้อยกว่าผู้รับข่าวสาร ให้เปิดแดชบอร์ดของ relay ของคุณสำหรับช่วงเวลาที่ส่ง และเปรียบเทียบจำนวนที่ relay รับกับของ Listmonk ความจริงอยู่ที่ relay
ปัญหาที่ 4: ไม่มีใครสำรองข้อมูล PostgreSQL Compose volume เก็บข้อมูลข้ามการรีสตาร์ท มันไม่ป้องกันความล้มเหลวของ host การ docker volume rm โดยไม่ตั้งใจ หรือการอัปเกรดที่เสียหาย เพิ่ม pg_dump รายวัน:
0 2 * * * docker exec listmonk-postgres pg_dump -U listmonk listmonk > /backups/listmonk-$(date +\%Y\%m\%d).sql
รันบรรทัดนี้ด้วยมือก่อนหนึ่งครั้ง ตรวจสอบว่าไฟล์ผลลัพธ์ไม่ว่างเปล่าก่อนที่คุณจะไว้ใจ cron entry สคริปต์สำรองข้อมูลที่เขียนไฟล์ขนาดศูนย์ไบต์โดยไม่แจ้ง error แย่กว่าการไม่สำรองข้อมูลเลย เพราะคุณจะหยุดคิดถึงมัน
ก่อนที่คุณจะไว้ใจสิ่งใดในนี้สำหรับการใช้งานจริง ส่งแคมเปญทดสอบไปยังผู้รับข่าวสารหนึ่งคน และยืนยันการรับในกล่องจดหมายเป้าหมาย หากอีเมลฉบับนั้นเข้าถึงอย่างสะอาด อีกหนึ่งหมื่นฉบับถัดไปก็จะเข้าถึงเช่นกัน
คำถามที่พบบ่อย
ทำไมอัตรา bounce ของ Listmonk ของฉันสูงกว่าที่ Amazon SES รายงาน?
การประมวลผล bounce ผ่าน POP3 ของ Listmonk ทำให้ตัวเลขพองโดยอ่านข้อความตอบกลับไม่อยู่ออฟฟิศและตอบกลับอัตโนมัติเวลาลาพักร้อนเป็น bounce ตั้งค่า SES SNS webhook callbacks เพื่อให้ได้ตัวเลขที่แม่นยำ
Listmonk รองรับ Transactional Email หรือไม่?
Listmonk เป็นเครื่องมือสำหรับนิวส์เลตเตอร์และแคมเปญแบบกระจาย มันไม่จัดการ transactional email ในตัว (การรีเซ็ตรหัสผ่าน การยืนยันคำสั่งซื้อ อีเมลที่ทริกเกอร์แบบหนึ่งต่อหนึ่ง) สำหรับ transactional email จากโดเมนผู้ส่งเดียวกัน ให้ตั้งค่า transactional endpoint ของ relay ของคุณแยกต่างหาก หรือใช้เครื่องมือเฉพาะอย่าง Postal หรือ transactional API ของ Postmark ควบคู่กับ Listmonk
ฉันจะนำเข้าผู้รับข่าวสาร Mailchimp ของฉันเข้า Listmonk อย่างไร?
ส่งออกรายชื่อ Mailchimp ของคุณเป็น CSV จาก Audience → Export Audience ใน Listmonk ไปที่ Subscribers → Import และอัปโหลด CSV จับคู่คอลัมน์อีเมลและชื่อเมื่อมีคำถาม Listmonk รับ CSV exports มาตรฐานจาก Mailchimp, ConvertKit และแพลตฟอร์มนิวส์เลตเตอร์ส่วนใหญ่โดยไม่ต้องแปลงรูปแบบ
เกิดอะไรขึ้นเมื่อมีคนยกเลิกการสมัครจากแคมเปญ Listmonk?
Listmonk เพิ่มลิงก์ยกเลิกการสมัครในอีเมลแคมเปญทุกฉบับโดยปริยาย เมื่อผู้รับข่าวสารคลิกมัน พวกเขาจะถูกเพิ่มเข้า blocklist และถูกลบออกจากแคมเปญในอนาคตทั้งหมด List-Unsubscribe header (RFC 8058) ถูกรวมไว้โดยอัตโนมัติ ดังนั้นไคลเอนต์เมลที่รองรับการยกเลิกการสมัครด้วยคลิกเดียว (Gmail, Apple Mail) จะแสดงมันโดยอัตโนมัติ ระเบียนผู้รับข่าวสารยังคงอยู่ในฐานข้อมูลเพื่อวัตถุประสงค์ในการตรวจสอบ แต่จะไม่มีการส่งแคมเปญใดๆ ไปยังพวกเขาอีก