Telegram notifikace nového e-mailu Dovecot (Debian)

Skript kontroluje složku /var/vmail kam se v OS Debian Linux ukládají na server příchozí Dovecot e-mailové zpravy. Po tom co se ve složce objeví nová zpráva skript díky přednastavenému Telegram token a uživatelskému ID um’pomocí curl odeslat notifikaci. Jedná se o Dovecot 2.4.1 instalovaný na serveru Debian 13

Skript uložíme do souboru monitor_vmail.sh v ceste /usr/local/bin/. Proměnné WATCH_DIR, BOT_TOKEN a CHAT_ID je nutné upravit dle vaší situace!

nano /usr/local/bin/monitor_vmail.sh
#!/usr/bin/env bash
set -euo pipefail

# ========== KONFIGURÁCIA Dovecot Path =============

WATCH_DIR="/var/vmail/mail.sk/info/Maildir/new"
LOGFILE="/var/log/mojmail-maildir-watch.log"

# Telegram
BOT_TOKEN="123456789:AAEqDHawGXKXBYfDEdeBOSOEAA04Ot26Uyk"
CHAT_ID="123456789"

MAILBOX_NAME="môj@mail.sk"

# ================== KONTROLY ==================

if [[ ! -d "$WATCH_DIR" ]]; then
    echo "Chyba: adresár $WATCH_DIR neexistuje" >&2
    exit 1
fi

command -v inotifywait >/dev/null || {
    echo "Chyba: inotify-tools nie sú nainštalované" >&2
    exit 1
}

command -v curl >/dev/null || {
    echo "Chyba: curl nie je nainštalovaný" >&2
    exit 1
}

# ================== FUNKCIE ==================

send_telegram() {
    local text="$1"

    curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
        -d chat_id="${CHAT_ID}" \
        --data-urlencode text="$text" \
        -d disable_web_page_preview=true \
        -d parse_mode="Markdown" \
        > /dev/null
}

log() {
    echo "$(date '+%F %T') $*" >> "$LOGFILE"
}

# ================== ŠTART ==================

log "Spúšťam sledovanie Maildir: $WATCH_DIR"

send_telegram "Mail watcher spustený
Schránka: $MAILBOX_NAME"

# ================== SLEDOVANIE ==================

inotifywait -m \
    --quiet \
    --event create,moved_to \
    --format '%f' \
    "$WATCH_DIR" |
while IFS= read -r filename; do
    FILE="$WATCH_DIR/$filename"

    # istota, že ide o súbor
    [[ -f "$FILE" ]] || continue

    # vytiahneme hlavičky (bez prerušenia)
    SUBJECT=$(sed -n 's/^Subject:[[:space:]]*//p' "$FILE" | head -n1 || true)
    FROM=$(sed -n 's/^From:[[:space:]]*//p' "$FILE" | head -n1 || true)
   # BODY_SNIPPET=$(awk '/^$/ {p=1; next} p {print}' "$FILE" | tr -d '\n' | awk '{for(i=1;i<=10;i++) printf "%s ", $i; print "..."}')
    BODY_SNIPPET=$(sed '1,/^$/d' "$FILE" | tr -d '\n\r' | sed -E 's/^(([^ ]+ +){15}[^ ]+).*/\1.../')

    SUBJECT=${SUBJECT:-"(bez predmetu)"}
    FROM=${FROM:-"(neznámy odosielateľ)"}
    BODY_SNIPPET=${BODY_SNIPPET:-"(telo bez textu)"}

    MSG="*Nová MÔJMAIL správa*
Od: $FROM
Predmet: $SUBJECT
Text: $BODY_SNIPPET"
    log "Nový mail: $filename | $SUBJECT"
    send_telegram "$MSG"

done

Systemd

nano /etc/systemd/system/vmail-notifier.service
[Unit]
Description=Vmail Telegram Notifier
After=network.target

[Service]
# Spúšťame pod rootom, aby sme mohli čítať /var/vmail
User=root
Group=root
ExecStart=/usr/local/bin/monitor_vmail.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Roundcube

Chyba vmail opravnění uživatele při použití souboru dovecot-sql.conf (/etc/dovecot/dovecot-sql.conf) například WEB Mail UI Roundcube lze vyřešit změnou vlastníka z root:root nebo root:dovecot na

chown :vmail /etc/dovecot/dovecot-sql.conf
chmod g+r /etc/dovecot/dovecot-sql.conf

Použité zdroje: AI