====== DMA - e-mail přes SMTP ======
DMA (DragonFly Mail Agent) je malý a jednoduchý forwarder pro posílání e-mailů přes SMTP. I když článek vypadá dlouze, stačí Quick Setup. Další kroky jsou spíš pro případ problémů. Je ideální náhradou za sSMTP či msmtp.
===== 🎯 Quick Setup (5 minut) =====
==== Krok 1: Instalace ====
sudo apt-get update
sudo apt-get install -y dma
----
==== Krok 2: Konfigurace dma.conf ====
sudo nano /etc/dma/dma.conf
**Přidej/uprav tyto řádky:**
# Gmail SMTP server
SMARTHOST smtp.gmail.com
# SMTP port (587 = submission port)
PORT 587
# ⚠️ KRITICKÉ: Aliasy MUSÍ být odkomentované!
ALIASES /etc/aliases
# Spool directory (fronta emailů)
SPOOLDIR /var/spool/dma
# Authentication file
AUTHPATH /etc/dma/auth.conf
# ⚠️ KRITICKÉ: TLS konfigurace pro Gmail
# MUSÍ být OBĚ tyto řádky!
SECURETRANSFER
STARTTLS
# Hostname (Debian specific)
MAILNAME /etc/mailname
**💡 DŮLEŽITÉ POZNATKY:** - ''%%SECURETRANSFER%%'' = zapne TLS - ''%%STARTTLS%%'' = upgrade na TLS během spojení (Gmail VYŽADUJE!) - Bez ''%%STARTTLS%%'' = dma procesy zamrznou při handshake - ''%%ALIASES%%'' musí být odkomentované, jinak dma ignoruje /etc/aliases
----
==== Krok 3: Authentication (Gmail přihlášení) ====
sudo nano /etc/dma/auth.conf
**Formát (PŘESNĚ takto!):**
your-email@gmail.com|smtp.gmail.com:your-app-password
**⚠️ KRITICKÉ DETAILY:** - Separator mezi emailem a serverem: ''%%|%%'' (pipe, NE colon!) - Format: ''%%email|server:password%%'' - Heslo je **Gmail App Password** (16 znaků) - Vytvoř na: https:%%//%%myaccount.google.com/apppasswords - Žádné mezery na začátku/konci! - Pouze jedna řádka!
**Příklad:**
petr@gmail.com|smtp.gmail.com:abcdefghijklmnop
**Práva (obsahuje heslo!):**
sudo chmod 640 /etc/dma/auth.conf
sudo chown root:mail /etc/dma/auth.conf
----
==== Krok 4: Aliasy (přeposílání root → tvůj email) ====
sudo nano /etc/aliases
**Přidej NA ZAČÁTEK:**
root: info@petrnosek.cz
nosek: info@petrnosek.cz
default: info@petrnosek.cz
**Reload aliases:**
sudo newaliases
**💡 Jak to funguje:** - Email na ''%%root%%'' → automaticky se přepošle na ''%%info@petrnosek.cz%%'' - dma **nativně podporuje** /etc/aliases - Žádný wrapper script potřeba!
----
==== Krok 5: Test ====
# Jednoduchý test
echo "Test dma setup" | mail -s "DMA Test" info@petrnosek.cz
# Počkej 10 sekund
sleep 10
# Zkontroluj queue (měla by být prázdná)
sudo dma -q
# Pokud queue není prázdná → něco je špatně
# Verbose flush pro debug:
sudo dma -q -v
----
===== 📂 Jak dma funguje =====
==== dma není daemon! ====
**DŮLEŽITÉ:** dma **NENÍ** persistentní daemon jako Postfix/Sendmail.
**Jak to funguje:** 1. Přijde email (např. ''%%mail -s "Test" user@example.com%%'') 2. dma vytvoří soubory ve frontě (''%%/var/spool/dma/%%'') 3. dma **OKAMŽITĚ spustí proces** pro odeslání 4. Po odeslání se proces ukončí 5. Žádný běžící daemon v pozadí
**To znamená:** - ✅ Minimální resource usage (žádný daemon běží pořád) - ✅ Automatické odesílání (ne jako DEFER mode) - ❌ Pokud selže TLS → proces zamrzne a visí
----
==== Fronta (Queue) - Jak to funguje ====
**Lokace:** ''%%/var/spool/dma/%%''
**Soubory ve frontě:**
M1400a4.xxxxx # Message soubor (obsah emailu)
Q1400a4.xxxxx # Queue soubor (metadata - komu, od koho)
flush # Lock soubor (když běží flush)
**Stavy:** - **Prázdná queue** = všechny emaily odeslané ✅ - **Plná queue** = emaily čekají (možná problém) ⚠️ - **Soubory starší než 1 hodina** = něco je špatně! ❌
----
===== 📋 Užitečné příkazy =====
==== Kontrola fronty ====
# Zobraz frontu (co čeká na odeslání)
sudo dma -q
# Prázdný output = všechno odesláno ✅
# Neprázdný output = emaily čekají
----
==== Manuální flush (vynutit odeslání) ====
# Odešli všechny emaily ve frontě
sudo dma -q flush
# S verbose výstupem (debug)
sudo dma -q -v
**💡 Kdy použít:** - Pokud emaily visí ve frontě - Po změně konfigurace - Pro debug (verbose mode)
----
==== Přímé odeslání (bypassing queue) ====
# Odešli email PŘÍMO (verbose, pro debug)
echo "Test message" | dma -v recipient@example.com
# Sleduj přesně co se děje:
# - Connection attempt
# - TLS handshake
# - SMTP commands
# - Authentication
# - Message delivery
----
==== Zabití zamrzlých procesů ====
# Pokud dma procesy visí (zamrzly při TLS handshake)
sudo pkill -9 dma
sudo pkill -9 sendmail
# Verifikuj, že jsou pryč
ps aux | grep dma | grep -v grep
**💡 Kdy použít:** - Procesy visí několik minut - Queue se neodesílá - Po změně TLS konfigurace (STARTTLS přidáno)
----
==== Debug - sledování procesů ====
# Kolik dma procesů běží?
ps aux | grep dma | grep -v grep
# Realtime sledování procesů
watch -n 1 'ps aux | grep dma | grep -v grep'
# Pokud vidíš procesy starší než 5 minut → problém!
----
==== Kontrola konfigurace ====
# Zobraz aktivní konfiguraci
grep -v '^#' /etc/dma/dma.conf | grep -v '^$'
# Měl bys vidět:
# SMARTHOST smtp.gmail.com
# PORT 587
# ALIASES /etc/aliases
# SPOOLDIR /var/spool/dma
# AUTHPATH /etc/dma/auth.conf
# SECURETRANSFER
# STARTTLS
# MAILNAME /etc/mailname
----
==== Testování SMTP konektivity ====
# Test, jestli je port 587 dostupný
timeout 5 bash -c "
----
==== Čištění staré fronty ====
# Smaž všechny emaily ve frontě (OPATRNĚ!)
sudo rm -f /var/spool/dma/M*
sudo rm -f /var/spool/dma/Q*
# Nebo jen staré emaily (>24 hodin)
sudo find /var/spool/dma -name "M*" -mtime +1 -delete
sudo find /var/spool/dma -name "Q*" -mtime +1 -delete
⚠️ **POZOR:** Tímto TRVALE smažeš neodeslané emaily!
----
===== 🔍 Troubleshooting =====
==== Problém: Queue není prázdná ====
# 1. Zkontroluj queue
sudo dma -q
# 2. Pokus se odeslat s verbose
sudo dma -q -v
# 3. Hledej error message:
# - "connection refused" → firewall/network
# - "authentication failed" → špatné heslo
# - "TLS handshake failed" → chybí STARTTLS
----
==== Problém: Procesy visí ====
# Symptom: Procesy běží 10+ minut
ps aux | grep dma
# Příčina: TLS problém (nejčastěji chybí STARTTLS)
# Řešení:
# 1. Zabij procesy
sudo pkill -9 dma
# 2. Zkontroluj TLS config
grep -E "SECURETRANSFER|STARTTLS" /etc/dma/dma.conf
# MUSÍ být OBĚ!
# 3. Flush queue
sudo dma -q -v
----
==== Problém: “authentication failed” ====
# Příčina: Špatné Gmail App Password nebo formát auth.conf
# 1. Vygeneruj NOVÉ App Password
# https://myaccount.google.com/apppasswords
# 2. Zkontroluj formát auth.conf
sudo cat /etc/dma/auth.conf
# MUSÍ být: email|server:password (pipe!)
# 3. Vytvoř nový clean soubor
sudo tee /etc/dma/auth.conf > /dev/null <<'EOF'
your-email@gmail.com|smtp.gmail.com:new-app-password
EOF
sudo chmod 640 /etc/dma/auth.conf
sudo chown root:mail /etc/dma/auth.conf
# 4. Test
echo "Auth test" | dma -v info@petrnosek.cz
----
==== Problém: Emaily jdou do SPAMu ====
# Příčina: Gmail vidí sender jako spam
# Řešení 1: Použij platnou Gmail adresu jako "from"
# V auth.conf použij svůj skutečný Gmail
# Řešení 2: V Gmailu označ jako "Not Spam"
# Řešení 3: Vytvoř Gmail filtr
# From: homeserver@*
# Action: Never send to Spam
----
===== 📊 Monitoring & Logs =====
==== Kde dma loguje? ====
dma **NELOGUJE** do samostatného souboru! Používá syslog.
**Debian/Ubuntu:**
# journalctl (systemd)
sudo journalctl -t dma -n 50
# Realtime sledování
sudo journalctl -t dma -f
# Pokud máš rsyslog:
sudo grep dma /var/log/syslog
sudo tail -f /var/log/syslog | grep dma
**💡 Co hledáš v lozích:** - ✅ “accepted” / “delivered” = úspěch - ❌ “authentication failed” = špatné heslo - ❌ “connection refused” = firewall - ❌ “TLS handshake failed” = chybí STARTTLS
----
==== Vytvoření dedikovaného mail.log (volitelné) ====
Pokud chceš dedikovaný log soubor:
# rsyslog konfigurace
sudo tee /etc/rsyslog.d/50-dma.conf > /dev/null <<'EOF'
:programname, isequal, "dma" /var/log/mail.log
& stop
EOF
# Restart rsyslog
sudo systemctl restart rsyslog
# Vytvoř log soubor
sudo touch /var/log/mail.log
sudo chmod 644 /var/log/mail.log
----
==== Pravidelná kontrola (monitoring script) ====
#!/bin/bash
# /opt/docker/scripts/check-dma-queue.sh
QUEUE_COUNT=$(sudo dma -q | wc -l)
OLD_MESSAGES=$(sudo find /var/spool/dma -name "M*" -mmin +60 | wc -l)
if [ $QUEUE_COUNT -gt 0 ]; then
echo "⚠️ WARNING: $QUEUE_COUNT emails in queue"
fi
if [ $OLD_MESSAGES -gt 0 ]; then
echo "❌ ERROR: $OLD_MESSAGES emails stuck >1 hour"
echo "Sending alert..."
echo "DMA queue stuck: $OLD_MESSAGES old messages" | mail -s "ALERT: DMA Queue Issue" root
fi
**Přidej do cronu:**
# Kontrola každých 15 minut
*/15 * * * * /opt/docker/scripts/check-dma-queue.sh
----
===== ✅ Finální Checklist (po instalaci) =====
* ☐ dma nainstalován (''%%apt-get install dma%%'')
* ☐ ''%%/etc/dma/dma.conf%%'' nakonfigurován
* ☐ ''%%SMARTHOST smtp.gmail.com%%''
* ☐ ''%%PORT 587%%''
* ☐ ''%%ALIASES /etc/aliases%%'' (ODKOMENTOVANÉ!)
* ☐ ''%%SECURETRANSFER%%''
* ☐ ''%%STARTTLS%%'' (KRITICKÉ!)
* ☐ ''%%/etc/dma/auth.conf%%'' vytvořen
* ☐ Formát: ''%%email|server:password%%''
* ☐ Práva: 640, owner: root:mail
* ☐ Gmail App Password použitý (NE běžné heslo)
* ☐ ''%%/etc/aliases%%'' nakonfigurován
* ☐ ''%%root: your-email@example.com%%''
* ☐ ''%%newaliases%%'' spuštěno
* ☐ Test odeslání úspěšný
* ☐ ''%%echo "test" | mail -s "Test" your-email@example.com%%''
* ☐ Email dorazil do schránky
* ☐ Queue je prázdná (''%%sudo dma -q%%'')
* ☐ SMTP konektivita OK
* ☐ Port 587 dostupný
* ☐ TLS funguje (STARTTLS)
* ☐ Žádné visící procesy
* ☐ ''%%ps aux | grep dma%%'' (prázdné nebo čerstvé)
----
===== 📖 Reference =====
**dma man page:**
man dma
man dma.conf
**Gmail SMTP:** - App Passwords: https:%%//%%myaccount.google.com/apppasswords - SMTP settings: https:%%//%%support.google.com/a/answer/176600
**Debian wiki:** - https:%%//%%wiki.debian.org/dma
----
===== 🎯 Klíčové poznatky z troubleshootingu =====
==== 1. STARTTLS je KRITICKÝ pro Gmail! ====
# NE jen toto:
SECURETRANSFER
# MUSÍ být OBĚ:
SECURETRANSFER
STARTTLS
**Bez STARTTLS:** - dma procesy zamrznou - Queue se neodesílá - Procesy visí hodiny
----
==== 2. ALIASES musí být odkomentované! ====
# Špatně:
#ALIASES /etc/aliases
# Správně:
ALIASES /etc/aliases
**Bez tohoto:** - dma ignoruje /etc/aliases - root emaily nejdou na tvůj email - Musíš specifikovat plnou adresu
----
==== 3. auth.conf formát je kritický ====
# Správně (pipe separator):
email@gmail.com|smtp.gmail.com:password
# Špatně (colon separator):
email@gmail.com:smtp.gmail.com:password
----
==== 4. dma není daemon ====
* Spouští se on-demand
* Po odeslání se ukončí
* Žádný persistent process
* Pokud proces visí >5 minut → problém!
----
==== 5. Queue != daemon běží ====
# Queue plná ≠ dma běží v pozadí
# Queue plná = problém s odesíláním (TLS/auth/network)
----
===== 🚀 Quick Commands Reference =====
# Test odeslání
echo "test" | mail -s "Test" user@example.com
# Kontrola fronty
sudo dma -q
# Flush fronty (verbose)
sudo dma -q -v
# Zabít zamrzlé procesy
sudo pkill -9 dma
# Sledování procesů
ps aux | grep dma | grep -v grep
# Debug - přímé odeslání
echo "test" | dma -v user@example.com
# Test SMTP konektivity
timeout 5 bash -c "