← back to Designer Wallcoverings
mailers/cc-api/test-send.js
40 lines
'use strict';
// One-shot CC v3 test-send (preview) of an existing campaign activity to internal addresses.
// Usage: node test-send.js <activity_id> <comma-separated-emails>
const https = require('https');
const cc = require('./cc-client');
const activityId = process.argv[2];
const emails = (process.argv[3] || '').split(',').map(s => s.trim()).filter(Boolean);
if (!activityId || !emails.length) { console.error('usage: node test-send.js <activity_id> <a@b.com,c@d.com>'); process.exit(1); }
function post(pathname, token, body) {
return new Promise((resolve, reject) => {
const data = JSON.stringify(body);
const req = https.request('https://api.cc.email/v3' + pathname, {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
Accept: 'application/json',
'Content-Length': Buffer.byteLength(data),
},
}, (res) => {
let buf = ''; res.on('data', d => buf += d);
res.on('end', () => resolve({ status: res.statusCode, body: buf }));
});
req.on('error', reject); req.write(data); req.end();
});
}
(async () => {
const token = await cc.getAccessToken();
const r = await post(`/emails/activities/${activityId}/tests`, token, {
email_addresses: emails,
personal_message: 'Preview — The Commercial Edit (8 contract houses, 3 picks each) + narrated flip-book. Draft only, not sent to any list.',
});
console.log('test-send HTTP', r.status);
console.log(r.body || '(empty body = accepted)');
process.exitCode = (r.status >= 200 && r.status < 300) ? 0 : 2;
})().catch(e => { console.error('ERROR', e.message); process.exitCode = 1; });