#!/usr/bin/env bash set -euo pipefail BASE="/var/lib/dmarc" INBOX="$BASE/reports" PROC="$BASE/processed" LOGF="$BASE/logs/collector.log" umask 027 TMPDIR="$(mktemp -d)" EML="$TMPDIR/mail.eml" cat > "$EML" ripmime --no-nameless --name-by-type --overwrite -i "$EML" -d "$TMPDIR" >>"$LOGF" 2>&1 || true TODAY="$(date -u +%Y/%m/%d)" OUTDIR="$INBOX/$TODAY" mkdir -p "$OUTDIR" moved=0 shopt -s nullglob for f in "$TMPDIR"/*; do case "$f" in *.xml|*.XML|*.gz|*.zip) sha="$(sha256sum "$f" | awk '{print $1}')" base="$(basename "$f")" dst="$OUTDIR/$(date -u +%Y%m%dT%H%M%SZ)_${sha:0:12}_$base" mv "$f" "$dst" echo "$(date -Is) stored $dst" >> "$LOGF" moved=$((moved+1)) ;; *) : ;; esac done mkdir -p "$PROC" mv "$EML" "$PROC/$(date -u +%Y%m%dT%H%M%SZ)_mail.eml" || true rm -rf "$TMPDIR" if (( moved > 0 )); then exit 0 else echo "$(date -Is) no usable attachment in message" >> "$LOGF" exit 0 fi