● Zion Boggan
repos/Zion Pm/archive/old-conductor-sketch/hands/execute-email.sh
zionboggan.com ↗
24 lines · bash
History for this file →
1
set -uo pipefail
2
OID="${1:?outbox id}"; OUT="${2:?outbox path}"
3
[ "${PM_APPROVED:-0}" = "1" ] || { echo "refuse: not an approved flush"; exit 2; }
4
 
5
PAYLOAD=$(jq -r --arg id "$OID" '.history[] | select(.id==$id) | .preview' "$OUT")
6
field(){ printf '%s\n' "$PAYLOAD" | sed -n "s/^$1:[[:space:]]*//p" | head -1; }
7
 
8
FROM=$(field FROM); PWVAR=$(field PWVAR); TO=$(field TO); SUBJECT=$(field SUBJECT)
9
BODY=$(printf '%s\n' "$PAYLOAD" | sed -n '/^BODY:/,$p' | tail -n +2)
10
 
11
[ -z "$FROM" ] || [ -z "$PWVAR" ] || [ -z "$TO" ] && {
12
  echo "execute-email: missing FROM/PWVAR/TO in draft $OID. Left for manual."; exit 3; }
13
 
14
source <(tr -d '\r' < /shared/projects/.env.secrets) 2>/dev/null
15
APP_PW="${!PWVAR:-}"
16
[ -z "$APP_PW" ] && { echo "execute-email: $PWVAR not set in .env.secrets (generate Gmail app password). Left for manual."; exit 3; }
17
 
18
echo "[pm] sending as $FROM -> $TO  (subj: $SUBJECT)"
19
printf 'From: %s\r\nTo: %s\r\nSubject: %s\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\n%s\r\n' \
20
  "$FROM" "$TO" "$SUBJECT" "$BODY" \
21
  | curl -s --ssl-reqd --url "smtps://smtp.gmail.com:465" \
22
         --user "$FROM:$APP_PW" --mail-from "$FROM" --mail-rcpt "$TO" --upload-file - \
23
  && { echo "[pm] sent ok"; exit 0; } \
24
  || { echo "[pm] send FAILED (check app password / Gmail security)"; exit 1; }