#!/usr/bin/env bash set -euo pipefail LIST="$1" DONE="$2" EMAIL="$3" MAX=${4:-1} touch "$DONE" count=0 while IFS= read -r line; do grep -Fxq -- "$line" "$DONE" && continue if msmtp "$line" < "$EMAIL"; then printf '%s\n' "$line" printf '%s\n' "$line" >> "$DONE" ((++count >= MAX)) && break else echo "FAILED: $line" >&2 grep -v $line $LIST > tmp mv tmp $LIST fi done < "$LIST"