====== 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 "