[object Object]

← back to Purelymail Fleet Viewer

add 206-domain SEND test — Purelymail cross-domain send-as runner

5acda4bc6c0f51fb24b87c3396ed4049ac817c97 · 2026-05-18 16:14:31 -0700 · SteveStudio2

Files touched

Diff

commit 5acda4bc6c0f51fb24b87c3396ed4049ac817c97
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Mon May 18 16:14:31 2026 -0700

    add 206-domain SEND test — Purelymail cross-domain send-as runner
---
 .gitignore                   |  1 +
 data/remediation-status.json | 14 +++++++---
 data/send-test-runid.txt     |  1 +
 run-send-test.js             | 62 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 75 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 43e7d3e..3e0aace 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ dist/
 build/
 .next/
 data/receive-test-sends.jsonl
+data/send-test-sends.jsonl
diff --git a/data/remediation-status.json b/data/remediation-status.json
index de66847..6f4fdae 100644
--- a/data/remediation-status.json
+++ b/data/remediation-status.json
@@ -1,5 +1,5 @@
 {
-  "updatedAt": "2026-05-18T23:10:02.309Z",
+  "updatedAt": "2026-05-18T23:14:30.844Z",
   "stage": "receive-test",
   "stageLabel": "Fix A + B complete — receive test sending",
   "fixA": {
@@ -19,10 +19,18 @@
   "receiveTest": {
     "status": "running",
     "label": "211-domain receive probe — tagged probe to each info@<domain>",
-    "done": 5,
+    "done": 85,
     "total": 211,
-    "note": "sending — 5/206 probes out (5 accepted)",
+    "note": "sending — 85/206 probes out (85 accepted)",
     "runId": "PMRCV-20260518230949",
     "sendPhaseComplete": true
+  },
+  "sendTest": {
+    "label": "SEND test — info@<domain> via Purelymail send-as",
+    "total": 206,
+    "status": "running",
+    "done": 5,
+    "note": "sending — 5/206 (5 accepted by SMTP)",
+    "runId": "PMSEND-20260518231415"
   }
 }
\ No newline at end of file
diff --git a/data/send-test-runid.txt b/data/send-test-runid.txt
new file mode 100644
index 0000000..2425c0c
--- /dev/null
+++ b/data/send-test-runid.txt
@@ -0,0 +1 @@
+PMSEND-20260518231415
\ No newline at end of file
diff --git a/run-send-test.js b/run-send-test.js
new file mode 100644
index 0000000..b9a7fb6
--- /dev/null
+++ b/run-send-test.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+/* Purelymail 206-domain SEND test.
+ * Sends one tagged email AS info@<domain> for every fleet domain, via one
+ * Purelymail SMTP login (info@glitterwalls.com) using cross-domain send-as.
+ * Collector inbox: theagentabrams@gmail.com — arrival there proves info@<domain>
+ * can send. ~3s apart, logs every send, updates the viewer status file live.
+ *
+ *   PM_SMTP_PASS=... node run-send-test.js
+ */
+'use strict';
+const fs = require('fs');
+const os = require('os');
+const path = require('path');
+const { sendAs, closeTransport } = require(path.join(os.homedir(),
+  'Projects/email-deliverability-agent/lib/fleet-send.js'));
+
+const HEALTH = path.join(os.homedir(), 'Projects/email-deliverability-agent/output/domain-health.json');
+const STATUS = path.join(__dirname, 'data/remediation-status.json');
+const SENDS  = path.join(__dirname, 'data/send-test-sends.jsonl');
+const RUNID_F= path.join(__dirname, 'data/send-test-runid.txt');
+const COLLECTOR = 'theagentabrams@gmail.com';
+
+if (!process.env.PM_SMTP_PASS) { console.error('PM_SMTP_PASS not set'); process.exit(1); }
+
+const runId = 'PMSEND-' + new Date().toISOString().replace(/[-:T.]/g, '').slice(0, 14);
+const domains = JSON.parse(fs.readFileSync(HEALTH, 'utf8')).domains.map(d => d.domain);
+fs.writeFileSync(SENDS, '');
+fs.writeFileSync(RUNID_F, runId);
+
+function patch(fields) {
+  try {
+    const s = JSON.parse(fs.readFileSync(STATUS, 'utf8'));
+    s.sendTest = Object.assign({ label: 'SEND test — info@<domain> via Purelymail send-as', total: domains.length }, s.sendTest, fields);
+    s.sendTest.runId = runId;
+    s.updatedAt = new Date().toISOString();
+    fs.writeFileSync(STATUS, JSON.stringify(s, null, 2));
+  } catch (e) { /* non-fatal */ }
+}
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+(async () => {
+  patch({ status: 'running', done: 0, note: 'starting send test' });
+  let sent = 0, okCount = 0;
+  for (const domain of domains) {
+    const subject = `PMSEND ${runId} ${domain}`;
+    const html = `<p>Purelymail SEND test. run=${runId} domain=${domain}. ` +
+      `This was sent AS info@${domain} via Purelymail send-as. Arrival here proves info@${domain} can send.</p>`;
+    const r = await sendAs(domain, { to: COLLECTOR, subject, html });
+    if (r.ok) okCount++;
+    fs.appendFileSync(SENDS, JSON.stringify({ domain, ok: r.ok, messageId: r.messageId || null, error: r.error || null }) + '\n');
+    sent++;
+    if (sent % 5 === 0 || sent === domains.length) {
+      patch({ done: sent, note: `sending — ${sent}/${domains.length} (${okCount} accepted by SMTP)` });
+    }
+    await sleep(3000);
+  }
+  closeTransport();
+  patch({ done: sent, note: `${sent} sent (${okCount} SMTP-accepted) — waiting 3 min for delivery`, smtpAccepted: okCount });
+  await sleep(180000);
+  patch({ note: `${sent} sent — delivery window elapsed, ready for collector-inbox tabulation`, sendPhaseComplete: true });
+  console.log(`send-test complete: ${sent} sent, ${okCount} SMTP-accepted, runId=${runId}`);
+})();

← 880c1c8 receive test v2 — send from agentabrams to dodge Gmail self-  ·  back to Purelymail Fleet Viewer  ·  viewer renders sendTest stage card 3e70a7c →