social-mcp 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/services/email-service.d.ts +26 -1
- package/dist/services/email-service.js +211 -58
- package/dist/services/email-service.js.map +1 -1
- package/dist/tools/email-tools/send-bulk-email.d.ts +18 -0
- package/dist/tools/email-tools/send-bulk-email.js +36 -2
- package/dist/tools/email-tools/send-bulk-email.js.map +1 -1
- package/dist/tools/email-tools/send-email.d.ts +18 -0
- package/dist/tools/email-tools/send-email.js +36 -2
- package/dist/tools/email-tools/send-email.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -328,7 +328,7 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
|
|
|
328
328
|
| `SES_SECRET_ACCESS_KEY`| AWS IAM Secret Access Key |
|
|
329
329
|
| `SES_REGION` | AWS region where your SES sending identity is verified (default: `us-east-1`) |
|
|
330
330
|
|
|
331
|
-
> **Note:** The sender address (`MAIL_FROM_ADDRESS`) must be a verified identity in your SES account. Sending uses the SES v2 REST API with AWS Signature V4 — no AWS SDK required.
|
|
331
|
+
> **Note:** The sender address (`MAIL_FROM_ADDRESS`) must be a verified identity in your SES account. Sending uses the SES v2 REST API with AWS Signature V4 — no AWS SDK required. On startup (and via `EmailService.verify()`), your keys are checked with a signed `GetAccount` call, the same way SMTP is checked with `transporter.verify()`. To also check sandbox mode and 24h sending quota (e.g. before kicking off a bulk send), call `EmailService.getSESAccountStatus()` — it reuses that same signed request and returns `{ sandboxMode, max24HourSend, maxSendRate, sentLast24Hours }`.
|
|
332
332
|
|
|
333
333
|
## Available Tools
|
|
334
334
|
|
|
@@ -469,10 +469,10 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
|
|
|
469
469
|
|
|
470
470
|
### Email
|
|
471
471
|
|
|
472
|
-
- **EMAIL_SEND** — Send an email to a single recipient (`to`, `subject`, `text`, `html`; plus optional inline credentials — see below)
|
|
473
|
-
- **EMAIL_SEND_BULK** — Send the same email to multiple recipients (`recipients`, `subject`, `text`, `html`; plus optional inline credentials)
|
|
472
|
+
- **EMAIL_SEND** — Send an email to a single recipient (`to`, `subject`, `text`, `html`, `cc`, `bcc`, `replyTo`, `headers`, `attachments`; plus optional inline credentials — see below)
|
|
473
|
+
- **EMAIL_SEND_BULK** — Send the same email to multiple recipients (`recipients`, `subject`, `text`, `html`, `cc`, `bcc`, `replyTo`, `headers`, `attachments`; plus optional inline credentials)
|
|
474
474
|
|
|
475
|
-
> The active mail driver is selected by `MAIL_MAILER`. Switching providers requires only changing that one variable — no code changes needed. Credentials can also be passed inline per call for multi-account / per-org use cases.
|
|
475
|
+
> The active mail driver is selected by `MAIL_MAILER`. Switching providers requires only changing that one variable — no code changes needed. Credentials can also be passed inline per call for multi-account / per-org use cases. `attachments` take `{ filename, content, contentType? }` with `content` as base64; for SES this transparently switches to a raw MIME message since attachments aren't supported by the plain send API.
|
|
476
476
|
|
|
477
477
|
### Dev.to
|
|
478
478
|
|
|
@@ -14,14 +14,39 @@ export interface EmailCredentials {
|
|
|
14
14
|
sesSecretAccessKey?: string;
|
|
15
15
|
sesRegion?: string;
|
|
16
16
|
}
|
|
17
|
+
export interface SESAccountStatus {
|
|
18
|
+
sandboxMode: boolean;
|
|
19
|
+
max24HourSend: number;
|
|
20
|
+
maxSendRate: number;
|
|
21
|
+
sentLast24Hours: number;
|
|
22
|
+
}
|
|
23
|
+
export interface EmailAttachment {
|
|
24
|
+
filename: string;
|
|
25
|
+
/** Base64-encoded file contents. */
|
|
26
|
+
content: string;
|
|
27
|
+
contentType?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface EmailMessage {
|
|
30
|
+
to: string | string[];
|
|
31
|
+
subject: string;
|
|
32
|
+
text: string;
|
|
33
|
+
html?: string;
|
|
34
|
+
cc?: string | string[];
|
|
35
|
+
bcc?: string | string[];
|
|
36
|
+
replyTo?: string;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
attachments?: EmailAttachment[];
|
|
39
|
+
}
|
|
17
40
|
export declare class EmailService {
|
|
18
41
|
private creds;
|
|
19
42
|
constructor(credentials?: EmailCredentials);
|
|
20
43
|
private validateCredentials;
|
|
21
44
|
private fromHeader;
|
|
22
45
|
private createSMTPTransporter;
|
|
46
|
+
private sesRequest;
|
|
47
|
+
getSESAccountStatus(): Promise<SESAccountStatus>;
|
|
23
48
|
verify(): Promise<void>;
|
|
24
|
-
send(
|
|
49
|
+
send(message: EmailMessage): Promise<void>;
|
|
25
50
|
private sendViaSMTP;
|
|
26
51
|
private sendViaSendGrid;
|
|
27
52
|
private sendViaMailgun;
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import { createHash, createHmac } from "node:crypto";
|
|
1
2
|
import nodemailer from "nodemailer";
|
|
2
|
-
import { createHash, createHmac } from "crypto";
|
|
3
3
|
import { config } from "../lib/config.js";
|
|
4
4
|
import { CredentialsError } from "../lib/errors.js";
|
|
5
|
+
function toArray(value) {
|
|
6
|
+
return Array.isArray(value) ? value : [value];
|
|
7
|
+
}
|
|
8
|
+
function joinAddresses(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return undefined;
|
|
11
|
+
return toArray(value).join(", ");
|
|
12
|
+
}
|
|
5
13
|
function credentialsFromConfig() {
|
|
6
14
|
const { mailer, fromAddress, fromName, smtp, sendgrid, mailgun, ses } = config.email;
|
|
7
15
|
return {
|
|
@@ -34,6 +42,35 @@ function sesSigningKey(secretKey, dateStamp, region) {
|
|
|
34
42
|
const kService = hmacSha256(kRegion, "ses");
|
|
35
43
|
return hmacSha256(kService, "aws4_request");
|
|
36
44
|
}
|
|
45
|
+
// Builds a raw MIME message so SES can send attachments (the v2 "Simple" content
|
|
46
|
+
// type has no attachment support). Bcc is deliberately left out of the headers —
|
|
47
|
+
// Destination.BccAddresses handles delivery without exposing the address to other recipients.
|
|
48
|
+
function buildRawMimeMessage(from, to, message) {
|
|
49
|
+
const boundaryMixed = `mixed_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
50
|
+
const boundaryAlt = `alt_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
51
|
+
const lines = [
|
|
52
|
+
`From: ${from}`,
|
|
53
|
+
`To: ${to.join(", ")}`,
|
|
54
|
+
`Subject: ${message.subject}`,
|
|
55
|
+
];
|
|
56
|
+
if (message.replyTo)
|
|
57
|
+
lines.push(`Reply-To: ${message.replyTo}`);
|
|
58
|
+
if (message.cc)
|
|
59
|
+
lines.push(`Cc: ${toArray(message.cc).join(", ")}`);
|
|
60
|
+
for (const [name, value] of Object.entries(message.headers ?? {})) {
|
|
61
|
+
lines.push(`${name}: ${value}`);
|
|
62
|
+
}
|
|
63
|
+
lines.push("MIME-Version: 1.0", `Content-Type: multipart/mixed; boundary="${boundaryMixed}"`, "", `--${boundaryMixed}`, `Content-Type: multipart/alternative; boundary="${boundaryAlt}"`, "", `--${boundaryAlt}`, 'Content-Type: text/plain; charset="UTF-8"', "Content-Transfer-Encoding: 7bit", "", message.text);
|
|
64
|
+
if (message.html) {
|
|
65
|
+
lines.push(`--${boundaryAlt}`, 'Content-Type: text/html; charset="UTF-8"', "Content-Transfer-Encoding: 7bit", "", message.html);
|
|
66
|
+
}
|
|
67
|
+
lines.push(`--${boundaryAlt}--`);
|
|
68
|
+
for (const attachment of message.attachments ?? []) {
|
|
69
|
+
lines.push(`--${boundaryMixed}`, `Content-Type: ${attachment.contentType ?? "application/octet-stream"}; name="${attachment.filename}"`, "Content-Transfer-Encoding: base64", `Content-Disposition: attachment; filename="${attachment.filename}"`, "", attachment.content.replace(/(.{76})/g, "$1\n"));
|
|
70
|
+
}
|
|
71
|
+
lines.push(`--${boundaryMixed}--`, "");
|
|
72
|
+
return Buffer.from(lines.join("\r\n"), "utf8").toString("base64");
|
|
73
|
+
}
|
|
37
74
|
export class EmailService {
|
|
38
75
|
creds;
|
|
39
76
|
constructor(credentials) {
|
|
@@ -93,39 +130,129 @@ export class EmailService {
|
|
|
93
130
|
auth: { user: smtpUsername, pass: smtpPassword },
|
|
94
131
|
});
|
|
95
132
|
}
|
|
96
|
-
//
|
|
133
|
+
// Signs and sends an SES v2 REST API request with AWS Signature V4.
|
|
134
|
+
async sesRequest(method, path, body) {
|
|
135
|
+
const { sesAccessKeyId, sesSecretAccessKey = "", sesRegion = "us-east-1", } = this.creds;
|
|
136
|
+
const region = sesRegion;
|
|
137
|
+
const host = `email.${region}.amazonaws.com`;
|
|
138
|
+
const now = new Date();
|
|
139
|
+
const amzDate = now
|
|
140
|
+
.toISOString()
|
|
141
|
+
.replace(/[:-]/g, "")
|
|
142
|
+
.replace(/\.\d{3}/, "");
|
|
143
|
+
const dateStamp = amzDate.slice(0, 8);
|
|
144
|
+
const bodyHash = sha256Hex(body);
|
|
145
|
+
const canonicalHeaders = `content-type:application/json\nhost:${host}\nx-amz-date:${amzDate}\n`;
|
|
146
|
+
const signedHeaders = "content-type;host;x-amz-date";
|
|
147
|
+
const canonicalRequest = [
|
|
148
|
+
method,
|
|
149
|
+
path,
|
|
150
|
+
"",
|
|
151
|
+
canonicalHeaders,
|
|
152
|
+
signedHeaders,
|
|
153
|
+
bodyHash,
|
|
154
|
+
].join("\n");
|
|
155
|
+
const credentialScope = `${dateStamp}/${region}/ses/aws4_request`;
|
|
156
|
+
const stringToSign = [
|
|
157
|
+
"AWS4-HMAC-SHA256",
|
|
158
|
+
amzDate,
|
|
159
|
+
credentialScope,
|
|
160
|
+
sha256Hex(canonicalRequest),
|
|
161
|
+
].join("\n");
|
|
162
|
+
const signingKey = sesSigningKey(sesSecretAccessKey, dateStamp, region);
|
|
163
|
+
const signature = createHmac("sha256", signingKey)
|
|
164
|
+
.update(stringToSign, "utf8")
|
|
165
|
+
.digest("hex");
|
|
166
|
+
const authorization = `AWS4-HMAC-SHA256 Credential=${sesAccessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
|
|
167
|
+
return fetch(`https://${host}${path}`, {
|
|
168
|
+
method,
|
|
169
|
+
headers: {
|
|
170
|
+
"Content-Type": "application/json",
|
|
171
|
+
"X-Amz-Date": amzDate,
|
|
172
|
+
Authorization: authorization,
|
|
173
|
+
},
|
|
174
|
+
...(method === "GET" ? {} : { body }),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
// SES-only: sandbox mode and 24h send quota, straight from the same GetAccount
|
|
178
|
+
// call verify() makes — lets a caller check quota before a bulk send instead of
|
|
179
|
+
// discovering it mid-batch as a wall of per-recipient throttling errors.
|
|
180
|
+
async getSESAccountStatus() {
|
|
181
|
+
if (this.creds.mailer !== "ses") {
|
|
182
|
+
throw new Error("getSESAccountStatus() is only available for mailer=ses");
|
|
183
|
+
}
|
|
184
|
+
const response = await this.sesRequest("GET", "/v2/email/account", "");
|
|
185
|
+
const body = await response.text();
|
|
186
|
+
if (!response.ok) {
|
|
187
|
+
throw new Error(`SES error (${response.status}): ${body}`);
|
|
188
|
+
}
|
|
189
|
+
const data = JSON.parse(body);
|
|
190
|
+
return {
|
|
191
|
+
sandboxMode: data.ProductionAccessEnabled !== true,
|
|
192
|
+
max24HourSend: data.SendQuota?.Max24HourSend ?? 0,
|
|
193
|
+
maxSendRate: data.SendQuota?.MaxSendRate ?? 0,
|
|
194
|
+
sentLast24Hours: data.SendQuota?.SentLast24Hours ?? 0,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Verifies credentials. SMTP: opens a connection. SES: signs a GetAccount call
|
|
198
|
+
// (free, read-only). No-op for SendGrid/Mailgun (no free verify endpoint).
|
|
97
199
|
async verify() {
|
|
98
200
|
if (this.creds.mailer === "smtp") {
|
|
99
201
|
const transporter = this.createSMTPTransporter();
|
|
100
202
|
await transporter.verify();
|
|
101
203
|
}
|
|
204
|
+
else if (this.creds.mailer === "ses") {
|
|
205
|
+
const response = await this.sesRequest("GET", "/v2/email/account", "");
|
|
206
|
+
if (!response.ok) {
|
|
207
|
+
const error = await response.text();
|
|
208
|
+
throw new Error(`SES error (${response.status}): ${error}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
102
211
|
}
|
|
103
|
-
async send(
|
|
212
|
+
async send(message) {
|
|
104
213
|
switch (this.creds.mailer) {
|
|
105
214
|
case "smtp":
|
|
106
|
-
return this.sendViaSMTP(
|
|
215
|
+
return this.sendViaSMTP(message);
|
|
107
216
|
case "sendgrid":
|
|
108
|
-
return this.sendViaSendGrid(
|
|
217
|
+
return this.sendViaSendGrid(message);
|
|
109
218
|
case "mailgun":
|
|
110
|
-
return this.sendViaMailgun(
|
|
219
|
+
return this.sendViaMailgun(message);
|
|
111
220
|
case "ses":
|
|
112
|
-
return this.sendViaSES(
|
|
221
|
+
return this.sendViaSES(message);
|
|
113
222
|
}
|
|
114
223
|
}
|
|
115
|
-
async sendViaSMTP(
|
|
224
|
+
async sendViaSMTP(message) {
|
|
116
225
|
const transporter = this.createSMTPTransporter();
|
|
117
226
|
await transporter.sendMail({
|
|
118
227
|
from: this.fromHeader(),
|
|
119
|
-
to:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
228
|
+
to: joinAddresses(message.to),
|
|
229
|
+
cc: joinAddresses(message.cc),
|
|
230
|
+
bcc: joinAddresses(message.bcc),
|
|
231
|
+
replyTo: message.replyTo,
|
|
232
|
+
subject: message.subject,
|
|
233
|
+
text: message.text,
|
|
234
|
+
html: message.html,
|
|
235
|
+
headers: message.headers,
|
|
236
|
+
attachments: message.attachments?.map((attachment) => ({
|
|
237
|
+
filename: attachment.filename,
|
|
238
|
+
content: attachment.content,
|
|
239
|
+
encoding: "base64",
|
|
240
|
+
contentType: attachment.contentType,
|
|
241
|
+
})),
|
|
123
242
|
});
|
|
124
243
|
}
|
|
125
|
-
async sendViaSendGrid(
|
|
126
|
-
const recipients =
|
|
244
|
+
async sendViaSendGrid(message) {
|
|
245
|
+
const recipients = toArray(message.to);
|
|
246
|
+
const ccList = message.cc
|
|
247
|
+
? toArray(message.cc).map((email) => ({ email }))
|
|
248
|
+
: undefined;
|
|
249
|
+
const bccList = message.bcc
|
|
250
|
+
? toArray(message.bcc).map((email) => ({ email }))
|
|
251
|
+
: undefined;
|
|
127
252
|
const personalizations = recipients.map((email) => ({
|
|
128
253
|
to: [{ email }],
|
|
254
|
+
...(ccList ? { cc: ccList } : {}),
|
|
255
|
+
...(bccList ? { bcc: bccList } : {}),
|
|
129
256
|
}));
|
|
130
257
|
const body = {
|
|
131
258
|
personalizations,
|
|
@@ -133,11 +260,23 @@ export class EmailService {
|
|
|
133
260
|
email: this.creds.fromAddress,
|
|
134
261
|
...(this.creds.fromName ? { name: this.creds.fromName } : {}),
|
|
135
262
|
},
|
|
136
|
-
subject,
|
|
263
|
+
subject: message.subject,
|
|
137
264
|
content: [
|
|
138
|
-
{ type: "text/plain", value: text },
|
|
139
|
-
...(html ? [{ type: "text/html", value: html }] : []),
|
|
265
|
+
{ type: "text/plain", value: message.text },
|
|
266
|
+
...(message.html ? [{ type: "text/html", value: message.html }] : []),
|
|
140
267
|
],
|
|
268
|
+
...(message.replyTo ? { reply_to: { email: message.replyTo } } : {}),
|
|
269
|
+
...(message.headers ? { headers: message.headers } : {}),
|
|
270
|
+
...(message.attachments
|
|
271
|
+
? {
|
|
272
|
+
attachments: message.attachments.map((attachment) => ({
|
|
273
|
+
content: attachment.content,
|
|
274
|
+
filename: attachment.filename,
|
|
275
|
+
type: attachment.contentType,
|
|
276
|
+
disposition: "attachment",
|
|
277
|
+
})),
|
|
278
|
+
}
|
|
279
|
+
: {}),
|
|
141
280
|
};
|
|
142
281
|
const response = await fetch("https://api.sendgrid.com/v3/mail/send", {
|
|
143
282
|
method: "POST",
|
|
@@ -152,15 +291,30 @@ export class EmailService {
|
|
|
152
291
|
throw new Error(`SendGrid error (${response.status}): ${error}`);
|
|
153
292
|
}
|
|
154
293
|
}
|
|
155
|
-
async sendViaMailgun(
|
|
294
|
+
async sendViaMailgun(message) {
|
|
156
295
|
const { mailgunApiKey, mailgunDomain } = this.creds;
|
|
157
296
|
const formData = new FormData();
|
|
158
297
|
formData.append("from", this.fromHeader());
|
|
159
|
-
formData.append("to",
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (
|
|
163
|
-
formData.append("
|
|
298
|
+
formData.append("to", joinAddresses(message.to) ?? "");
|
|
299
|
+
if (message.cc)
|
|
300
|
+
formData.append("cc", joinAddresses(message.cc) ?? "");
|
|
301
|
+
if (message.bcc)
|
|
302
|
+
formData.append("bcc", joinAddresses(message.bcc) ?? "");
|
|
303
|
+
if (message.replyTo)
|
|
304
|
+
formData.append("h:Reply-To", message.replyTo);
|
|
305
|
+
formData.append("subject", message.subject);
|
|
306
|
+
formData.append("text", message.text);
|
|
307
|
+
if (message.html)
|
|
308
|
+
formData.append("html", message.html);
|
|
309
|
+
for (const [name, value] of Object.entries(message.headers ?? {})) {
|
|
310
|
+
formData.append(`h:${name}`, value);
|
|
311
|
+
}
|
|
312
|
+
for (const attachment of message.attachments ?? []) {
|
|
313
|
+
const buffer = Buffer.from(attachment.content, "base64");
|
|
314
|
+
formData.append("attachment", new Blob([buffer], {
|
|
315
|
+
type: attachment.contentType || "application/octet-stream",
|
|
316
|
+
}), attachment.filename);
|
|
317
|
+
}
|
|
164
318
|
const credentials = Buffer.from(`api:${mailgunApiKey}`).toString("base64");
|
|
165
319
|
const response = await fetch(`https://api.mailgun.net/v3/${mailgunDomain}/messages`, {
|
|
166
320
|
method: "POST",
|
|
@@ -172,46 +326,45 @@ export class EmailService {
|
|
|
172
326
|
throw new Error(`Mailgun error (${response.status}): ${error}`);
|
|
173
327
|
}
|
|
174
328
|
}
|
|
175
|
-
async sendViaSES(
|
|
176
|
-
const
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
329
|
+
async sendViaSES(message) {
|
|
330
|
+
const toAddresses = toArray(message.to);
|
|
331
|
+
const destination = { ToAddresses: toAddresses };
|
|
332
|
+
if (message.cc)
|
|
333
|
+
destination.CcAddresses = toArray(message.cc);
|
|
334
|
+
if (message.bcc)
|
|
335
|
+
destination.BccAddresses = toArray(message.bcc);
|
|
336
|
+
const content = message.attachments?.length
|
|
337
|
+
? {
|
|
338
|
+
Raw: {
|
|
339
|
+
Data: buildRawMimeMessage(this.fromHeader(), toAddresses, message),
|
|
340
|
+
},
|
|
341
|
+
}
|
|
342
|
+
: {
|
|
185
343
|
Simple: {
|
|
186
|
-
Subject: { Data: subject, Charset: "UTF-8" },
|
|
344
|
+
Subject: { Data: message.subject, Charset: "UTF-8" },
|
|
187
345
|
Body: {
|
|
188
|
-
Text: { Data: text, Charset: "UTF-8" },
|
|
189
|
-
...(html
|
|
346
|
+
Text: { Data: message.text, Charset: "UTF-8" },
|
|
347
|
+
...(message.html
|
|
348
|
+
? { Html: { Data: message.html, Charset: "UTF-8" } }
|
|
349
|
+
: {}),
|
|
190
350
|
},
|
|
351
|
+
...(message.headers
|
|
352
|
+
? {
|
|
353
|
+
Headers: Object.entries(message.headers).map(([Name, Value]) => ({
|
|
354
|
+
Name,
|
|
355
|
+
Value,
|
|
356
|
+
})),
|
|
357
|
+
}
|
|
358
|
+
: {}),
|
|
191
359
|
},
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const canonicalHeaders = `content-type:application/json\nhost:${host}\nx-amz-date:${amzDate}\n`;
|
|
199
|
-
const signedHeaders = "content-type;host;x-amz-date";
|
|
200
|
-
const canonicalRequest = ["POST", path, "", canonicalHeaders, signedHeaders, bodyHash].join("\n");
|
|
201
|
-
const credentialScope = `${dateStamp}/${region}/ses/aws4_request`;
|
|
202
|
-
const stringToSign = ["AWS4-HMAC-SHA256", amzDate, credentialScope, sha256Hex(canonicalRequest)].join("\n");
|
|
203
|
-
const signingKey = sesSigningKey(sesSecretAccessKey, dateStamp, region);
|
|
204
|
-
const signature = createHmac("sha256", signingKey).update(stringToSign, "utf8").digest("hex");
|
|
205
|
-
const authorization = `AWS4-HMAC-SHA256 Credential=${sesAccessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
|
|
206
|
-
const response = await fetch(`https://${host}${path}`, {
|
|
207
|
-
method: "POST",
|
|
208
|
-
headers: {
|
|
209
|
-
"Content-Type": "application/json",
|
|
210
|
-
"X-Amz-Date": amzDate,
|
|
211
|
-
Authorization: authorization,
|
|
212
|
-
},
|
|
213
|
-
body,
|
|
360
|
+
};
|
|
361
|
+
const body = JSON.stringify({
|
|
362
|
+
FromEmailAddress: this.fromHeader(),
|
|
363
|
+
Destination: destination,
|
|
364
|
+
Content: content,
|
|
365
|
+
...(message.replyTo ? { ReplyToAddresses: [message.replyTo] } : {}),
|
|
214
366
|
});
|
|
367
|
+
const response = await this.sesRequest("POST", "/v2/email/outbound-emails", body);
|
|
215
368
|
if (!response.ok) {
|
|
216
369
|
const error = await response.text();
|
|
217
370
|
throw new Error(`SES error (${response.status}): ${error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAmBpD,SAAS,qBAAqB;IAC7B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GACpE,MAAM,CAAC,KAAK,CAAC;IACd,OAAO;QACN,MAAM,EAAE,MAAiD;QACzD,WAAW;QACX,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC/B,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,YAAY,EAAE,IAAI,CAAC,QAAQ;QAC3B,YAAY,EAAE,IAAI,CAAC,QAAQ;QAC3B,cAAc,EAAE,IAAI,CAAC,UAAU;QAC/B,cAAc,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;QAC5C,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;QAC1C,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;QAC1C,cAAc,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QAC5C,kBAAkB,EAAE,GAAG,CAAC,eAAe,IAAI,SAAS;QACpD,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;KAClC,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAAC,GAAoB,EAAE,IAAY;IACrD,OAAO,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAc;IAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,OAAO,YAAY;IAChB,KAAK,CAAmB;IAEhC,YAAY,WAA8B;QACzC,IAAI,CAAC,KAAK,GAAG,WAAW,IAAI,qBAAqB,EAAE,CAAC;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAEO,mBAAmB;QAC1B,MAAM,EACL,MAAM,EACN,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,EACd,kBAAkB,GAClB,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjD,MAAM,IAAI,gBAAgB,CAAC,cAAc,EAAE;oBAC1C,WAAW;oBACX,eAAe;oBACf,eAAe;iBACf,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACtE,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,EAAE;oBAC7C,iBAAiB;oBACjB,gBAAgB;iBAChB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5C,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,EAAE;oBAChD,mBAAmB;oBACnB,uBAAuB;iBACvB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACd,wBAAwB,MAAM,4CAA4C,CAC1E,CAAC;QACH,CAAC;IACF,CAAC;IAEO,UAAU;QACjB,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;IAClE,CAAC;IAEO,qBAAqB;QAC5B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,GACvE,IAAI,CAAC,KAAK,CAAC;QACZ,OAAO,UAAU,CAAC,eAAe,CAAC;YACjC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ,IAAI,GAAG;YACrB,MAAM,EAAE,cAAc,KAAK,KAAK;YAChC,UAAU,EAAE,cAAc,KAAK,KAAK,IAAI,cAAc,KAAK,MAAM;YACjE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE;SAChD,CAAC,CAAC;IACJ,CAAC;IAED,0FAA0F;IAC1F,KAAK,CAAC,MAAM;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjD,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CACT,EAAqB,EACrB,OAAe,EACf,IAAY,EACZ,IAAa;QAEb,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClD,KAAK,UAAU;gBACd,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACtD,KAAK,SAAS;gBACb,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrD,KAAK,KAAK;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,WAAW,CACxB,EAAqB,EACrB,OAAe,EACf,IAAY,EACZ,IAAa;QAEb,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjD,MAAM,WAAW,CAAC,QAAQ,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;YACvB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1C,OAAO;YACP,IAAI;YACJ,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAC5B,EAAqB,EACrB,OAAe,EACf,IAAY,EACZ,IAAa;QAEb,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnD,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;SACf,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAA4B;YACrC,gBAAgB;YAChB,IAAI,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;gBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,OAAO;YACP,OAAO,EAAE;gBACR,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;gBACnC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD;SACD,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBACpD,cAAc,EAAE,kBAAkB;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,cAAc,CAC3B,EAAqB,EACrB,OAAe,EACf,IAAY,EACZ,IAAa;QAEb,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3C,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC3B,8BAA8B,aAAa,WAAW,EACtD;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,WAAW,EAAE,EAAE;YAClD,IAAI,EAAE,QAAQ;SACd,CACD,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,UAAU,CACvB,EAAqB,EACrB,OAAe,EACf,IAAY,EACZ,IAAa;QAEb,MAAM,EAAE,cAAc,EAAE,kBAAkB,GAAG,EAAE,EAAE,SAAS,GAAG,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/G,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,MAAM,gBAAgB,CAAC;QAC7C,MAAM,IAAI,GAAG,2BAA2B,CAAC;QAEzC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW;YAC3E,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE;YACzC,OAAO,EAAE;gBACR,MAAM,EAAE;oBACP,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;oBAC5C,IAAI,EAAE;wBACL,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;wBACtC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3D;iBACD;aACD;SACD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,gBAAgB,GAAG,uCAAuC,IAAI,gBAAgB,OAAO,IAAI,CAAC;QAChG,MAAM,aAAa,GAAG,8BAA8B,CAAC;QACrD,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,MAAM,eAAe,GAAG,GAAG,SAAS,IAAI,MAAM,mBAAmB,CAAC;QAClE,MAAM,YAAY,GAAG,CAAC,kBAAkB,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,MAAM,UAAU,GAAG,aAAa,CAAC,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9F,MAAM,aAAa,GAAG,+BAA+B,cAAc,IAAI,eAAe,mBAAmB,aAAa,eAAe,SAAS,EAAE,CAAC;QAEjJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,IAAI,GAAG,IAAI,EAAE,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,OAAO;gBACrB,aAAa,EAAE,aAAa;aAC5B;YACD,IAAI;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;CACD;AAED,yDAAyD;AACzD,wEAAwE;AACxE,8DAA8D;AAC9D,IAAI,SAAmC,CAAC;AACxC,MAAM,UAAU,eAAe;IAC9B,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/C,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,15 @@ declare const sendBulkEmailParams: z.ZodObject<{
|
|
|
27
27
|
subject: z.ZodString;
|
|
28
28
|
text: z.ZodString;
|
|
29
29
|
html: z.ZodOptional<z.ZodString>;
|
|
30
|
+
cc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
31
|
+
bcc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
32
|
+
replyTo: z.ZodOptional<z.ZodString>;
|
|
33
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
34
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
35
|
+
filename: z.ZodString;
|
|
36
|
+
content: z.ZodString;
|
|
37
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>>>;
|
|
30
39
|
}, z.core.$strip>;
|
|
31
40
|
type SendBulkEmailParams = z.infer<typeof sendBulkEmailParams>;
|
|
32
41
|
export declare const sendBulkEmailTool: {
|
|
@@ -60,6 +69,15 @@ export declare const sendBulkEmailTool: {
|
|
|
60
69
|
subject: z.ZodString;
|
|
61
70
|
text: z.ZodString;
|
|
62
71
|
html: z.ZodOptional<z.ZodString>;
|
|
72
|
+
cc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
73
|
+
bcc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
74
|
+
replyTo: z.ZodOptional<z.ZodString>;
|
|
75
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
76
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
77
|
+
filename: z.ZodString;
|
|
78
|
+
content: z.ZodString;
|
|
79
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, z.core.$strip>>>;
|
|
63
81
|
}, z.core.$strip>;
|
|
64
82
|
readonly execute: (params: SendBulkEmailParams) => Promise<string>;
|
|
65
83
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CredentialsError } from "../../lib/errors.js";
|
|
3
|
-
import { EmailService, getEmailService
|
|
3
|
+
import { EmailService, getEmailService } from "../../services/email-service.js";
|
|
4
4
|
const sendBulkEmailParams = z.object({
|
|
5
5
|
// ── Inline credentials (all optional — omit to use env var config) ──────
|
|
6
6
|
mailer: z
|
|
@@ -72,6 +72,30 @@ const sendBulkEmailParams = z.object({
|
|
|
72
72
|
.string()
|
|
73
73
|
.optional()
|
|
74
74
|
.describe("Optional HTML body. Falls back to text if omitted."),
|
|
75
|
+
cc: z
|
|
76
|
+
.union([z.string().email(), z.array(z.string().email())])
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Cc recipient(s). With mailer=sendgrid each recipient gets a separate message, so Cc receives one copy per recipient; with other mailers all recipients share one message and Cc receives it once."),
|
|
79
|
+
bcc: z
|
|
80
|
+
.union([z.string().email(), z.array(z.string().email())])
|
|
81
|
+
.optional()
|
|
82
|
+
.describe("Bcc recipient(s). With mailer=sendgrid each recipient gets a separate message, so Bcc receives one copy per recipient; with other mailers all recipients share one message and Bcc receives it once."),
|
|
83
|
+
replyTo: z.string().email().optional().describe("Reply-To address."),
|
|
84
|
+
headers: z
|
|
85
|
+
.record(z.string(), z.string())
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Custom email headers, e.g. { "X-Campaign-Id": "123" }.'),
|
|
88
|
+
attachments: z
|
|
89
|
+
.array(z.object({
|
|
90
|
+
filename: z.string().describe("Attachment file name."),
|
|
91
|
+
content: z.string().describe("Base64-encoded file contents."),
|
|
92
|
+
contentType: z
|
|
93
|
+
.string()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe("MIME type, e.g. application/pdf."),
|
|
96
|
+
}))
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("File attachments."),
|
|
75
99
|
});
|
|
76
100
|
export const sendBulkEmailTool = {
|
|
77
101
|
name: "EMAIL_SEND_BULK",
|
|
@@ -97,7 +121,17 @@ export const sendBulkEmailTool = {
|
|
|
97
121
|
sesRegion: params.sesRegion,
|
|
98
122
|
})
|
|
99
123
|
: getEmailService();
|
|
100
|
-
await service.send(
|
|
124
|
+
await service.send({
|
|
125
|
+
to: params.recipients,
|
|
126
|
+
subject: params.subject,
|
|
127
|
+
text: params.text,
|
|
128
|
+
html: params.html,
|
|
129
|
+
cc: params.cc,
|
|
130
|
+
bcc: params.bcc,
|
|
131
|
+
replyTo: params.replyTo,
|
|
132
|
+
headers: params.headers,
|
|
133
|
+
attachments: params.attachments,
|
|
134
|
+
});
|
|
101
135
|
return `Email sent successfully to ${params.recipients.length} recipient(s): ${params.recipients.join(", ")}.`;
|
|
102
136
|
}
|
|
103
137
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-bulk-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-bulk-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"send-bulk-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-bulk-email.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,15 @@ declare const sendEmailParams: z.ZodObject<{
|
|
|
27
27
|
subject: z.ZodString;
|
|
28
28
|
text: z.ZodString;
|
|
29
29
|
html: z.ZodOptional<z.ZodString>;
|
|
30
|
+
cc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
31
|
+
bcc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
32
|
+
replyTo: z.ZodOptional<z.ZodString>;
|
|
33
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
34
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
35
|
+
filename: z.ZodString;
|
|
36
|
+
content: z.ZodString;
|
|
37
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>>>;
|
|
30
39
|
}, z.core.$strip>;
|
|
31
40
|
type SendEmailParams = z.infer<typeof sendEmailParams>;
|
|
32
41
|
export declare const sendEmailTool: {
|
|
@@ -60,6 +69,15 @@ export declare const sendEmailTool: {
|
|
|
60
69
|
subject: z.ZodString;
|
|
61
70
|
text: z.ZodString;
|
|
62
71
|
html: z.ZodOptional<z.ZodString>;
|
|
72
|
+
cc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
73
|
+
bcc: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
74
|
+
replyTo: z.ZodOptional<z.ZodString>;
|
|
75
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
76
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
77
|
+
filename: z.ZodString;
|
|
78
|
+
content: z.ZodString;
|
|
79
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, z.core.$strip>>>;
|
|
63
81
|
}, z.core.$strip>;
|
|
64
82
|
readonly execute: (params: SendEmailParams) => Promise<string>;
|
|
65
83
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CredentialsError } from "../../lib/errors.js";
|
|
3
|
-
import { EmailService, getEmailService
|
|
3
|
+
import { EmailService, getEmailService } from "../../services/email-service.js";
|
|
4
4
|
const sendEmailParams = z.object({
|
|
5
5
|
// ── Inline credentials (all optional — omit to use env var config) ──────
|
|
6
6
|
mailer: z
|
|
@@ -69,6 +69,30 @@ const sendEmailParams = z.object({
|
|
|
69
69
|
.string()
|
|
70
70
|
.optional()
|
|
71
71
|
.describe("Optional HTML body. Falls back to text if omitted."),
|
|
72
|
+
cc: z
|
|
73
|
+
.union([z.string().email(), z.array(z.string().email())])
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Cc recipient(s)."),
|
|
76
|
+
bcc: z
|
|
77
|
+
.union([z.string().email(), z.array(z.string().email())])
|
|
78
|
+
.optional()
|
|
79
|
+
.describe("Bcc recipient(s)."),
|
|
80
|
+
replyTo: z.string().email().optional().describe("Reply-To address."),
|
|
81
|
+
headers: z
|
|
82
|
+
.record(z.string(), z.string())
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Custom email headers, e.g. { "X-Campaign-Id": "123" }.'),
|
|
85
|
+
attachments: z
|
|
86
|
+
.array(z.object({
|
|
87
|
+
filename: z.string().describe("Attachment file name."),
|
|
88
|
+
content: z.string().describe("Base64-encoded file contents."),
|
|
89
|
+
contentType: z
|
|
90
|
+
.string()
|
|
91
|
+
.optional()
|
|
92
|
+
.describe("MIME type, e.g. application/pdf."),
|
|
93
|
+
}))
|
|
94
|
+
.optional()
|
|
95
|
+
.describe("File attachments."),
|
|
72
96
|
});
|
|
73
97
|
export const sendEmailTool = {
|
|
74
98
|
name: "EMAIL_SEND",
|
|
@@ -94,7 +118,17 @@ export const sendEmailTool = {
|
|
|
94
118
|
sesRegion: params.sesRegion,
|
|
95
119
|
})
|
|
96
120
|
: getEmailService();
|
|
97
|
-
await service.send(
|
|
121
|
+
await service.send({
|
|
122
|
+
to: params.to,
|
|
123
|
+
subject: params.subject,
|
|
124
|
+
text: params.text,
|
|
125
|
+
html: params.html,
|
|
126
|
+
cc: params.cc,
|
|
127
|
+
bcc: params.bcc,
|
|
128
|
+
replyTo: params.replyTo,
|
|
129
|
+
headers: params.headers,
|
|
130
|
+
attachments: params.attachments,
|
|
131
|
+
});
|
|
98
132
|
return `Email sent successfully to ${params.to}.`;
|
|
99
133
|
}
|
|
100
134
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "social-mcp",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, Slack, LinkedIn, Reddit, Threads, TikTok, Pinterest, Medium, and Email (SMTP/SendGrid/Mailgun)",
|
|
3
|
+
"version": "2.5.0",
|
|
4
|
+
"description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, Slack, LinkedIn, Reddit, Threads, TikTok, Pinterest, Medium, and Email (SMTP/SendGrid/Mailgun/SES)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|