Zobrazit stránkuStarší verzeZpětné odkazyNahoru Tato stránka je pouze pro čtení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho měnit. Zeptejte se správce, pokud si myslíte, že něco není v pořádku. ====== 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 ==== <code bash> sudo apt-get update sudo apt-get install -y dma </code> ---- ==== Krok 2: Konfigurace dma.conf ==== <code bash> sudo nano /etc/dma/dma.conf </code> **Přidej/uprav tyto řádky:** <code ini> # 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 </code> **💡 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í) ==== <code bash> sudo nano /etc/dma/auth.conf </code> **Formát (PŘESNĚ takto!):** <code> your-email@gmail.com|smtp.gmail.com:your-app-password </code> **⚠️ 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:** <code> petr@gmail.com|smtp.gmail.com:abcdefghijklmnop </code> **Práva (obsahuje heslo!):** <code bash> sudo chmod 640 /etc/dma/auth.conf sudo chown root:mail /etc/dma/auth.conf </code> ---- ==== Krok 4: Aliasy (přeposílání root → tvůj email) ==== <code bash> sudo nano /etc/aliases </code> **Přidej NA ZAČÁTEK:** <code> root: info@petrnosek.cz nosek: info@petrnosek.cz default: info@petrnosek.cz </code> **Reload aliases:** <code bash> sudo newaliases </code> **💡 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 ==== <code bash> # 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 </code> ---- ===== 📂 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ě:** <code> M1400a4.xxxxx # Message soubor (obsah emailu) Q1400a4.xxxxx # Queue soubor (metadata - komu, od koho) flush # Lock soubor (když běží flush) </code> **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 ==== <code bash> # Zobraz frontu (co čeká na odeslání) sudo dma -q # Prázdný output = všechno odesláno ✅ # Neprázdný output = emaily čekají </code> ---- ==== Manuální flush (vynutit odeslání) ==== <code bash> # Odešli všechny emaily ve frontě sudo dma -q flush # S verbose výstupem (debug) sudo dma -q -v </code> **💡 Kdy použít:** - Pokud emaily visí ve frontě - Po změně konfigurace - Pro debug (verbose mode) ---- ==== Přímé odeslání (bypassing queue) ==== <code bash> # 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 </code> ---- ==== Zabití zamrzlých procesů ==== <code bash> # 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 </code> **💡 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ů ==== <code bash> # 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! </code> ---- ==== Kontrola konfigurace ==== <code bash> # 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 </code> ---- ==== Testování SMTP konektivity ==== <code bash> # Test, jestli je port 587 dostupný timeout 5 bash -c "</dev/tcp/smtp.gmail.com/587" && echo "✅ OK" || echo "❌ BLOCKED" # Test s telnet (detailed) telnet smtp.gmail.com 587 # Měl bys vidět: 220 smtp.google.com ESMTP # Ukonči: Ctrl+] → quit </code> ---- ==== Čištění staré fronty ==== <code bash> # 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 </code> ⚠️ **POZOR:** Tímto TRVALE smažeš neodeslané emaily! ---- ===== 🔍 Troubleshooting ===== ==== Problém: Queue není prázdná ==== <code bash> # 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 </code> ---- ==== Problém: Procesy visí ==== <code bash> # 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 </code> ---- ==== Problém: “authentication failed” ==== <code bash> # 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 </code> ---- ==== Problém: Emaily jdou do SPAMu ==== <code bash> # 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 </code> ---- ===== 📊 Monitoring & Logs ===== ==== Kde dma loguje? ==== dma **NELOGUJE** do samostatného souboru! Používá syslog. **Debian/Ubuntu:** <code bash> # 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 </code> **💡 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: <code bash> # 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 </code> ---- ==== Pravidelná kontrola (monitoring script) ==== <code bash> #!/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 </code> **Přidej do cronu:** <code bash> # Kontrola každých 15 minut */15 * * * * /opt/docker/scripts/check-dma-queue.sh </code> ---- ===== ✅ 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:** <code bash> man dma man dma.conf </code> **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! ==== <code ini> # NE jen toto: SECURETRANSFER # MUSÍ být OBĚ: SECURETRANSFER STARTTLS </code> **Bez STARTTLS:** - dma procesy zamrznou - Queue se neodesílá - Procesy visí hodiny ---- ==== 2. ALIASES musí být odkomentované! ==== <code ini> # Špatně: #ALIASES /etc/aliases # Správně: ALIASES /etc/aliases </code> **Bez tohoto:** - dma ignoruje /etc/aliases - root emaily nejdou na tvůj email - Musíš specifikovat plnou adresu ---- ==== 3. auth.conf formát je kritický ==== <code> # Správně (pipe separator): email@gmail.com|smtp.gmail.com:password # Špatně (colon separator): email@gmail.com:smtp.gmail.com:password </code> ---- ==== 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ěží ==== <code bash> # Queue plná ≠ dma běží v pozadí # Queue plná = problém s odesíláním (TLS/auth/network) </code> ---- ===== 🚀 Quick Commands Reference ===== <code bash> # 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 "</dev/tcp/smtp.gmail.com/587" && echo OK # Zobraz aktivní config grep -v '^#' /etc/dma/dma.conf | grep -v '^$' # Kontrola auth.conf sudo cat /etc/dma/auth.conf # Logy sudo journalctl -t dma -n 50 </code> it/server/dma.txt Poslední úprava: 2025/12/29 10:15autor: Petr Nosek