social-mcp 2.2.0 → 2.4.1
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 +18 -5
- package/dist/lib/config.d.ts +5 -0
- package/dist/lib/config.js +5 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/services/email-service.d.ts +24 -2
- package/dist/services/email-service.js +229 -24
- package/dist/services/email-service.js.map +1 -1
- package/dist/tools/email-tools/send-bulk-email.d.ts +26 -0
- package/dist/tools/email-tools/send-bulk-email.js +53 -3
- package/dist/tools/email-tools/send-bulk-email.js.map +1 -1
- package/dist/tools/email-tools/send-email.d.ts +26 -0
- package/dist/tools/email-tools/send-email.js +53 -3
- package/dist/tools/email-tools/send-email.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ An MCP (Model Context Protocol) server that lets AI assistants post and interact
|
|
|
22
22
|
| YouTube | Get channel info, search videos, get video info, list channel videos, get comments, post comment, update video |
|
|
23
23
|
| Pinterest | Get boards, create board, create pin, get pin, get board pins, delete pin |
|
|
24
24
|
| Medium | Get user profile, publish article (Markdown, up to 5 tags, public/draft/unlisted) |
|
|
25
|
-
| Email | Send email, send bulk email (drivers: SMTP, SendGrid, Mailgun)
|
|
25
|
+
| Email | Send email, send bulk email (drivers: SMTP, SendGrid, Mailgun, Amazon SES) |
|
|
26
26
|
| Dev.to | Create article, get my articles, get article by ID, update article |
|
|
27
27
|
| Hashnode | Create post, get posts, get publication info |
|
|
28
28
|
| Beehiiv | Create newsletter post, get posts, get subscribers |
|
|
@@ -91,6 +91,9 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
|
91
91
|
"MAIL_USERNAME": "you@gmail.com",
|
|
92
92
|
"MAIL_PASSWORD": "your_password",
|
|
93
93
|
"MAIL_ENCRYPTION": "tls",
|
|
94
|
+
"SES_ACCESS_KEY_ID": "your_access_key_id",
|
|
95
|
+
"SES_SECRET_ACCESS_KEY": "your_secret_access_key",
|
|
96
|
+
"SES_REGION": "us-east-1",
|
|
94
97
|
"DEVTO_API_KEY": "your_api_key",
|
|
95
98
|
"HASHNODE_ACCESS_TOKEN": "your_token",
|
|
96
99
|
"HASHNODE_PUBLICATION_ID": "your_publication_id",
|
|
@@ -284,7 +287,7 @@ Copy `example.env` to `.env` and fill in the credentials for the platforms you w
|
|
|
284
287
|
|
|
285
288
|
Email uses a Laravel-style driver system. **Env vars are optional** — credentials can also be passed inline per tool call (see [Per-org / Multi-account Usage](#per-org--multi-account-usage)).
|
|
286
289
|
|
|
287
|
-
Set `MAIL_MAILER` to select your provider and only configure the variables for the driver you choose.
|
|
290
|
+
Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `ses`) and only configure the variables for the driver you choose.
|
|
288
291
|
|
|
289
292
|
| Variable | Description |
|
|
290
293
|
| -------------------- | ---------------------------------------------------------------------- |
|
|
@@ -317,6 +320,16 @@ Set `MAIL_MAILER` to select your provider and only configure the variables for t
|
|
|
317
320
|
| `MAILGUN_API_KEY` | API key from [Mailgun account settings](https://app.mailgun.com/app/account/security/api_keys) |
|
|
318
321
|
| `MAILGUN_DOMAIN` | Your Mailgun sending domain (e.g. `mg.yourdomain.com`) |
|
|
319
322
|
|
|
323
|
+
**Amazon SES** (`MAIL_MAILER=ses`)
|
|
324
|
+
|
|
325
|
+
| Variable | Description |
|
|
326
|
+
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
327
|
+
| `SES_ACCESS_KEY_ID` | AWS IAM Access Key ID — the IAM user must have `ses:SendEmail` permission |
|
|
328
|
+
| `SES_SECRET_ACCESS_KEY`| AWS IAM Secret Access Key |
|
|
329
|
+
| `SES_REGION` | AWS region where your SES sending identity is verified (default: `us-east-1`) |
|
|
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. On startup (and via `EmailService.verify()`), your keys are checked with a signed `GetAccount` call, the same way SMTP is checked with `transporter.verify()`. This only confirms the keys are valid — it does not report sandbox mode or sending quota; check those in the AWS console or via your own `GetAccount` call if you need them.
|
|
332
|
+
|
|
320
333
|
## Available Tools
|
|
321
334
|
|
|
322
335
|
### Telegram
|
|
@@ -456,10 +469,10 @@ Set `MAIL_MAILER` to select your provider and only configure the variables for t
|
|
|
456
469
|
|
|
457
470
|
### Email
|
|
458
471
|
|
|
459
|
-
- **EMAIL_SEND** — Send an email to a single recipient (`to`, `subject`, `text`, `html`; plus optional inline credentials — see below)
|
|
460
|
-
- **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)
|
|
461
474
|
|
|
462
|
-
> 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.
|
|
463
476
|
|
|
464
477
|
### Dev.to
|
|
465
478
|
|
package/dist/lib/config.d.ts
CHANGED
package/dist/lib/config.js
CHANGED
|
@@ -107,6 +107,11 @@ export const config = {
|
|
|
107
107
|
apiKey: process.env.MAILGUN_API_KEY || "",
|
|
108
108
|
domain: process.env.MAILGUN_DOMAIN || "",
|
|
109
109
|
},
|
|
110
|
+
ses: {
|
|
111
|
+
accessKeyId: process.env.SES_ACCESS_KEY_ID || "",
|
|
112
|
+
secretAccessKey: process.env.SES_SECRET_ACCESS_KEY || "",
|
|
113
|
+
region: process.env.SES_REGION || "us-east-1",
|
|
114
|
+
},
|
|
110
115
|
},
|
|
111
116
|
};
|
|
112
117
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface EmailCredentials {
|
|
2
|
-
mailer: "smtp" | "sendgrid" | "mailgun";
|
|
2
|
+
mailer: "smtp" | "sendgrid" | "mailgun" | "ses";
|
|
3
3
|
fromAddress: string;
|
|
4
4
|
fromName?: string;
|
|
5
5
|
smtpHost?: string;
|
|
@@ -10,6 +10,26 @@ export interface EmailCredentials {
|
|
|
10
10
|
sendgridApiKey?: string;
|
|
11
11
|
mailgunApiKey?: string;
|
|
12
12
|
mailgunDomain?: string;
|
|
13
|
+
sesAccessKeyId?: string;
|
|
14
|
+
sesSecretAccessKey?: string;
|
|
15
|
+
sesRegion?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface EmailAttachment {
|
|
18
|
+
filename: string;
|
|
19
|
+
/** Base64-encoded file contents. */
|
|
20
|
+
content: string;
|
|
21
|
+
contentType?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EmailMessage {
|
|
24
|
+
to: string | string[];
|
|
25
|
+
subject: string;
|
|
26
|
+
text: string;
|
|
27
|
+
html?: string;
|
|
28
|
+
cc?: string | string[];
|
|
29
|
+
bcc?: string | string[];
|
|
30
|
+
replyTo?: string;
|
|
31
|
+
headers?: Record<string, string>;
|
|
32
|
+
attachments?: EmailAttachment[];
|
|
13
33
|
}
|
|
14
34
|
export declare class EmailService {
|
|
15
35
|
private creds;
|
|
@@ -17,10 +37,12 @@ export declare class EmailService {
|
|
|
17
37
|
private validateCredentials;
|
|
18
38
|
private fromHeader;
|
|
19
39
|
private createSMTPTransporter;
|
|
40
|
+
private sesRequest;
|
|
20
41
|
verify(): Promise<void>;
|
|
21
|
-
send(
|
|
42
|
+
send(message: EmailMessage): Promise<void>;
|
|
22
43
|
private sendViaSMTP;
|
|
23
44
|
private sendViaSendGrid;
|
|
24
45
|
private sendViaMailgun;
|
|
46
|
+
private sendViaSES;
|
|
25
47
|
}
|
|
26
48
|
export declare function getEmailService(): EmailService;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
+
import { createHash, createHmac } from "node:crypto";
|
|
1
2
|
import nodemailer from "nodemailer";
|
|
2
3
|
import { config } from "../lib/config.js";
|
|
3
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
|
+
}
|
|
4
13
|
function credentialsFromConfig() {
|
|
5
|
-
const { mailer, fromAddress, fromName, smtp, sendgrid, mailgun } = config.email;
|
|
14
|
+
const { mailer, fromAddress, fromName, smtp, sendgrid, mailgun, ses } = config.email;
|
|
6
15
|
return {
|
|
7
16
|
mailer: mailer,
|
|
8
17
|
fromAddress,
|
|
@@ -15,8 +24,53 @@ function credentialsFromConfig() {
|
|
|
15
24
|
sendgridApiKey: sendgrid.apiKey || undefined,
|
|
16
25
|
mailgunApiKey: mailgun.apiKey || undefined,
|
|
17
26
|
mailgunDomain: mailgun.domain || undefined,
|
|
27
|
+
sesAccessKeyId: ses.accessKeyId || undefined,
|
|
28
|
+
sesSecretAccessKey: ses.secretAccessKey || undefined,
|
|
29
|
+
sesRegion: ses.region || undefined,
|
|
18
30
|
};
|
|
19
31
|
}
|
|
32
|
+
// ── AWS Sig V4 helpers ────────────────────────────────────────────────────────
|
|
33
|
+
function sha256Hex(data) {
|
|
34
|
+
return createHash("sha256").update(data, "utf8").digest("hex");
|
|
35
|
+
}
|
|
36
|
+
function hmacSha256(key, data) {
|
|
37
|
+
return createHmac("sha256", key).update(data, "utf8").digest();
|
|
38
|
+
}
|
|
39
|
+
function sesSigningKey(secretKey, dateStamp, region) {
|
|
40
|
+
const kDate = hmacSha256(`AWS4${secretKey}`, dateStamp);
|
|
41
|
+
const kRegion = hmacSha256(kDate, region);
|
|
42
|
+
const kService = hmacSha256(kRegion, "ses");
|
|
43
|
+
return hmacSha256(kService, "aws4_request");
|
|
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
|
+
}
|
|
20
74
|
export class EmailService {
|
|
21
75
|
creds;
|
|
22
76
|
constructor(credentials) {
|
|
@@ -24,7 +78,7 @@ export class EmailService {
|
|
|
24
78
|
this.validateCredentials();
|
|
25
79
|
}
|
|
26
80
|
validateCredentials() {
|
|
27
|
-
const { mailer, fromAddress, smtpHost, smtpUsername, smtpPassword, sendgridApiKey, mailgunApiKey, mailgunDomain, } = this.creds;
|
|
81
|
+
const { mailer, fromAddress, smtpHost, smtpUsername, smtpPassword, sendgridApiKey, mailgunApiKey, mailgunDomain, sesAccessKeyId, sesSecretAccessKey, } = this.creds;
|
|
28
82
|
if (!fromAddress) {
|
|
29
83
|
throw new CredentialsError("Email", ["MAIL_FROM_ADDRESS"]);
|
|
30
84
|
}
|
|
@@ -50,8 +104,16 @@ export class EmailService {
|
|
|
50
104
|
]);
|
|
51
105
|
}
|
|
52
106
|
}
|
|
107
|
+
else if (mailer === "ses") {
|
|
108
|
+
if (!sesAccessKeyId || !sesSecretAccessKey) {
|
|
109
|
+
throw new CredentialsError("Email (Amazon SES)", [
|
|
110
|
+
"SES_ACCESS_KEY_ID",
|
|
111
|
+
"SES_SECRET_ACCESS_KEY",
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
53
115
|
else {
|
|
54
|
-
throw new Error(`Unsupported mailer: "${mailer}". Supported: smtp, sendgrid, mailgun`);
|
|
116
|
+
throw new Error(`Unsupported mailer: "${mailer}". Supported: smtp, sendgrid, mailgun, ses`);
|
|
55
117
|
}
|
|
56
118
|
}
|
|
57
119
|
fromHeader() {
|
|
@@ -68,37 +130,109 @@ export class EmailService {
|
|
|
68
130
|
auth: { user: smtpUsername, pass: smtpPassword },
|
|
69
131
|
});
|
|
70
132
|
}
|
|
71
|
-
//
|
|
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
|
+
// Verifies credentials. SMTP: opens a connection. SES: signs a GetAccount call
|
|
178
|
+
// (free, read-only). No-op for SendGrid/Mailgun (no free verify endpoint).
|
|
72
179
|
async verify() {
|
|
73
180
|
if (this.creds.mailer === "smtp") {
|
|
74
181
|
const transporter = this.createSMTPTransporter();
|
|
75
182
|
await transporter.verify();
|
|
76
183
|
}
|
|
184
|
+
else if (this.creds.mailer === "ses") {
|
|
185
|
+
const response = await this.sesRequest("GET", "/v2/email/account", "");
|
|
186
|
+
if (!response.ok) {
|
|
187
|
+
const error = await response.text();
|
|
188
|
+
throw new Error(`SES error (${response.status}): ${error}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
77
191
|
}
|
|
78
|
-
async send(
|
|
192
|
+
async send(message) {
|
|
79
193
|
switch (this.creds.mailer) {
|
|
80
194
|
case "smtp":
|
|
81
|
-
return this.sendViaSMTP(
|
|
195
|
+
return this.sendViaSMTP(message);
|
|
82
196
|
case "sendgrid":
|
|
83
|
-
return this.sendViaSendGrid(
|
|
197
|
+
return this.sendViaSendGrid(message);
|
|
84
198
|
case "mailgun":
|
|
85
|
-
return this.sendViaMailgun(
|
|
199
|
+
return this.sendViaMailgun(message);
|
|
200
|
+
case "ses":
|
|
201
|
+
return this.sendViaSES(message);
|
|
86
202
|
}
|
|
87
203
|
}
|
|
88
|
-
async sendViaSMTP(
|
|
204
|
+
async sendViaSMTP(message) {
|
|
89
205
|
const transporter = this.createSMTPTransporter();
|
|
90
206
|
await transporter.sendMail({
|
|
91
207
|
from: this.fromHeader(),
|
|
92
|
-
to:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
208
|
+
to: joinAddresses(message.to),
|
|
209
|
+
cc: joinAddresses(message.cc),
|
|
210
|
+
bcc: joinAddresses(message.bcc),
|
|
211
|
+
replyTo: message.replyTo,
|
|
212
|
+
subject: message.subject,
|
|
213
|
+
text: message.text,
|
|
214
|
+
html: message.html,
|
|
215
|
+
headers: message.headers,
|
|
216
|
+
attachments: message.attachments?.map((attachment) => ({
|
|
217
|
+
filename: attachment.filename,
|
|
218
|
+
content: attachment.content,
|
|
219
|
+
encoding: "base64",
|
|
220
|
+
contentType: attachment.contentType,
|
|
221
|
+
})),
|
|
96
222
|
});
|
|
97
223
|
}
|
|
98
|
-
async sendViaSendGrid(
|
|
99
|
-
const recipients =
|
|
224
|
+
async sendViaSendGrid(message) {
|
|
225
|
+
const recipients = toArray(message.to);
|
|
226
|
+
const ccList = message.cc
|
|
227
|
+
? toArray(message.cc).map((email) => ({ email }))
|
|
228
|
+
: undefined;
|
|
229
|
+
const bccList = message.bcc
|
|
230
|
+
? toArray(message.bcc).map((email) => ({ email }))
|
|
231
|
+
: undefined;
|
|
100
232
|
const personalizations = recipients.map((email) => ({
|
|
101
233
|
to: [{ email }],
|
|
234
|
+
...(ccList ? { cc: ccList } : {}),
|
|
235
|
+
...(bccList ? { bcc: bccList } : {}),
|
|
102
236
|
}));
|
|
103
237
|
const body = {
|
|
104
238
|
personalizations,
|
|
@@ -106,11 +240,23 @@ export class EmailService {
|
|
|
106
240
|
email: this.creds.fromAddress,
|
|
107
241
|
...(this.creds.fromName ? { name: this.creds.fromName } : {}),
|
|
108
242
|
},
|
|
109
|
-
subject,
|
|
243
|
+
subject: message.subject,
|
|
110
244
|
content: [
|
|
111
|
-
{ type: "text/plain", value: text },
|
|
112
|
-
...(html ? [{ type: "text/html", value: html }] : []),
|
|
245
|
+
{ type: "text/plain", value: message.text },
|
|
246
|
+
...(message.html ? [{ type: "text/html", value: message.html }] : []),
|
|
113
247
|
],
|
|
248
|
+
...(message.replyTo ? { reply_to: { email: message.replyTo } } : {}),
|
|
249
|
+
...(message.headers ? { headers: message.headers } : {}),
|
|
250
|
+
...(message.attachments
|
|
251
|
+
? {
|
|
252
|
+
attachments: message.attachments.map((attachment) => ({
|
|
253
|
+
content: attachment.content,
|
|
254
|
+
filename: attachment.filename,
|
|
255
|
+
type: attachment.contentType,
|
|
256
|
+
disposition: "attachment",
|
|
257
|
+
})),
|
|
258
|
+
}
|
|
259
|
+
: {}),
|
|
114
260
|
};
|
|
115
261
|
const response = await fetch("https://api.sendgrid.com/v3/mail/send", {
|
|
116
262
|
method: "POST",
|
|
@@ -125,15 +271,30 @@ export class EmailService {
|
|
|
125
271
|
throw new Error(`SendGrid error (${response.status}): ${error}`);
|
|
126
272
|
}
|
|
127
273
|
}
|
|
128
|
-
async sendViaMailgun(
|
|
274
|
+
async sendViaMailgun(message) {
|
|
129
275
|
const { mailgunApiKey, mailgunDomain } = this.creds;
|
|
130
276
|
const formData = new FormData();
|
|
131
277
|
formData.append("from", this.fromHeader());
|
|
132
|
-
formData.append("to",
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (
|
|
136
|
-
formData.append("
|
|
278
|
+
formData.append("to", joinAddresses(message.to) ?? "");
|
|
279
|
+
if (message.cc)
|
|
280
|
+
formData.append("cc", joinAddresses(message.cc) ?? "");
|
|
281
|
+
if (message.bcc)
|
|
282
|
+
formData.append("bcc", joinAddresses(message.bcc) ?? "");
|
|
283
|
+
if (message.replyTo)
|
|
284
|
+
formData.append("h:Reply-To", message.replyTo);
|
|
285
|
+
formData.append("subject", message.subject);
|
|
286
|
+
formData.append("text", message.text);
|
|
287
|
+
if (message.html)
|
|
288
|
+
formData.append("html", message.html);
|
|
289
|
+
for (const [name, value] of Object.entries(message.headers ?? {})) {
|
|
290
|
+
formData.append(`h:${name}`, value);
|
|
291
|
+
}
|
|
292
|
+
for (const attachment of message.attachments ?? []) {
|
|
293
|
+
const buffer = Buffer.from(attachment.content, "base64");
|
|
294
|
+
formData.append("attachment", new Blob([buffer], {
|
|
295
|
+
type: attachment.contentType || "application/octet-stream",
|
|
296
|
+
}), attachment.filename);
|
|
297
|
+
}
|
|
137
298
|
const credentials = Buffer.from(`api:${mailgunApiKey}`).toString("base64");
|
|
138
299
|
const response = await fetch(`https://api.mailgun.net/v3/${mailgunDomain}/messages`, {
|
|
139
300
|
method: "POST",
|
|
@@ -145,6 +306,50 @@ export class EmailService {
|
|
|
145
306
|
throw new Error(`Mailgun error (${response.status}): ${error}`);
|
|
146
307
|
}
|
|
147
308
|
}
|
|
309
|
+
async sendViaSES(message) {
|
|
310
|
+
const toAddresses = toArray(message.to);
|
|
311
|
+
const destination = { ToAddresses: toAddresses };
|
|
312
|
+
if (message.cc)
|
|
313
|
+
destination.CcAddresses = toArray(message.cc);
|
|
314
|
+
if (message.bcc)
|
|
315
|
+
destination.BccAddresses = toArray(message.bcc);
|
|
316
|
+
const content = message.attachments?.length
|
|
317
|
+
? {
|
|
318
|
+
Raw: {
|
|
319
|
+
Data: buildRawMimeMessage(this.fromHeader(), toAddresses, message),
|
|
320
|
+
},
|
|
321
|
+
}
|
|
322
|
+
: {
|
|
323
|
+
Simple: {
|
|
324
|
+
Subject: { Data: message.subject, Charset: "UTF-8" },
|
|
325
|
+
Body: {
|
|
326
|
+
Text: { Data: message.text, Charset: "UTF-8" },
|
|
327
|
+
...(message.html
|
|
328
|
+
? { Html: { Data: message.html, Charset: "UTF-8" } }
|
|
329
|
+
: {}),
|
|
330
|
+
},
|
|
331
|
+
...(message.headers
|
|
332
|
+
? {
|
|
333
|
+
Headers: Object.entries(message.headers).map(([Name, Value]) => ({
|
|
334
|
+
Name,
|
|
335
|
+
Value,
|
|
336
|
+
})),
|
|
337
|
+
}
|
|
338
|
+
: {}),
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
const body = JSON.stringify({
|
|
342
|
+
FromEmailAddress: this.fromHeader(),
|
|
343
|
+
Destination: destination,
|
|
344
|
+
Content: content,
|
|
345
|
+
...(message.replyTo ? { ReplyToAddresses: [message.replyTo] } : {}),
|
|
346
|
+
});
|
|
347
|
+
const response = await this.sesRequest("POST", "/v2/email/outbound-emails", body);
|
|
348
|
+
if (!response.ok) {
|
|
349
|
+
const error = await response.text();
|
|
350
|
+
throw new Error(`SES error (${response.status}): ${error}`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
148
353
|
}
|
|
149
354
|
// Singleton for the env-var-based default configuration.
|
|
150
355
|
// When calling tools with per-org credentials, pass an EmailCredentials
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ declare const sendBulkEmailParams: z.ZodObject<{
|
|
|
4
4
|
smtp: "smtp";
|
|
5
5
|
sendgrid: "sendgrid";
|
|
6
6
|
mailgun: "mailgun";
|
|
7
|
+
ses: "ses";
|
|
7
8
|
}>>;
|
|
8
9
|
fromAddress: z.ZodOptional<z.ZodString>;
|
|
9
10
|
fromName: z.ZodOptional<z.ZodString>;
|
|
@@ -19,10 +20,22 @@ declare const sendBulkEmailParams: z.ZodObject<{
|
|
|
19
20
|
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
20
21
|
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
21
22
|
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
23
|
+
sesAccessKeyId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
sesSecretAccessKey: z.ZodOptional<z.ZodString>;
|
|
25
|
+
sesRegion: z.ZodOptional<z.ZodString>;
|
|
22
26
|
recipients: z.ZodArray<z.ZodString>;
|
|
23
27
|
subject: z.ZodString;
|
|
24
28
|
text: z.ZodString;
|
|
25
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>>>;
|
|
26
39
|
}, z.core.$strip>;
|
|
27
40
|
type SendBulkEmailParams = z.infer<typeof sendBulkEmailParams>;
|
|
28
41
|
export declare const sendBulkEmailTool: {
|
|
@@ -33,6 +46,7 @@ export declare const sendBulkEmailTool: {
|
|
|
33
46
|
smtp: "smtp";
|
|
34
47
|
sendgrid: "sendgrid";
|
|
35
48
|
mailgun: "mailgun";
|
|
49
|
+
ses: "ses";
|
|
36
50
|
}>>;
|
|
37
51
|
fromAddress: z.ZodOptional<z.ZodString>;
|
|
38
52
|
fromName: z.ZodOptional<z.ZodString>;
|
|
@@ -48,10 +62,22 @@ export declare const sendBulkEmailTool: {
|
|
|
48
62
|
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
49
63
|
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
50
64
|
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
65
|
+
sesAccessKeyId: z.ZodOptional<z.ZodString>;
|
|
66
|
+
sesSecretAccessKey: z.ZodOptional<z.ZodString>;
|
|
67
|
+
sesRegion: z.ZodOptional<z.ZodString>;
|
|
51
68
|
recipients: z.ZodArray<z.ZodString>;
|
|
52
69
|
subject: z.ZodString;
|
|
53
70
|
text: z.ZodString;
|
|
54
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>>>;
|
|
55
81
|
}, z.core.$strip>;
|
|
56
82
|
readonly execute: (params: SendBulkEmailParams) => Promise<string>;
|
|
57
83
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
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
|
|
7
|
-
.enum(["smtp", "sendgrid", "mailgun"])
|
|
7
|
+
.enum(["smtp", "sendgrid", "mailgun", "ses"])
|
|
8
8
|
.optional()
|
|
9
9
|
.describe("Mail driver. Required when not configured via env vars (MAIL_MAILER)."),
|
|
10
10
|
fromAddress: z
|
|
@@ -48,6 +48,19 @@ const sendBulkEmailParams = z.object({
|
|
|
48
48
|
.string()
|
|
49
49
|
.optional()
|
|
50
50
|
.describe("Mailgun sending domain. Required when mailer=mailgun."),
|
|
51
|
+
// Amazon SES
|
|
52
|
+
sesAccessKeyId: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("AWS IAM Access Key ID. Required when mailer=ses."),
|
|
56
|
+
sesSecretAccessKey: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("AWS IAM Secret Access Key. Required when mailer=ses."),
|
|
60
|
+
sesRegion: z
|
|
61
|
+
.string()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("AWS region for SES (default us-east-1). Used when mailer=ses."),
|
|
51
64
|
// ── Message ──────────────────────────────────────────────────────────────
|
|
52
65
|
recipients: z
|
|
53
66
|
.array(z.string().email())
|
|
@@ -59,6 +72,30 @@ const sendBulkEmailParams = z.object({
|
|
|
59
72
|
.string()
|
|
60
73
|
.optional()
|
|
61
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."),
|
|
62
99
|
});
|
|
63
100
|
export const sendBulkEmailTool = {
|
|
64
101
|
name: "EMAIL_SEND_BULK",
|
|
@@ -79,9 +116,22 @@ export const sendBulkEmailTool = {
|
|
|
79
116
|
sendgridApiKey: params.sendgridApiKey,
|
|
80
117
|
mailgunApiKey: params.mailgunApiKey,
|
|
81
118
|
mailgunDomain: params.mailgunDomain,
|
|
119
|
+
sesAccessKeyId: params.sesAccessKeyId,
|
|
120
|
+
sesSecretAccessKey: params.sesSecretAccessKey,
|
|
121
|
+
sesRegion: params.sesRegion,
|
|
82
122
|
})
|
|
83
123
|
: getEmailService();
|
|
84
|
-
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
|
+
});
|
|
85
135
|
return `Email sent successfully to ${params.recipients.length} recipient(s): ${params.recipients.join(", ")}.`;
|
|
86
136
|
}
|
|
87
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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"}
|
|
@@ -4,6 +4,7 @@ declare const sendEmailParams: z.ZodObject<{
|
|
|
4
4
|
smtp: "smtp";
|
|
5
5
|
sendgrid: "sendgrid";
|
|
6
6
|
mailgun: "mailgun";
|
|
7
|
+
ses: "ses";
|
|
7
8
|
}>>;
|
|
8
9
|
fromAddress: z.ZodOptional<z.ZodString>;
|
|
9
10
|
fromName: z.ZodOptional<z.ZodString>;
|
|
@@ -19,10 +20,22 @@ declare const sendEmailParams: z.ZodObject<{
|
|
|
19
20
|
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
20
21
|
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
21
22
|
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
23
|
+
sesAccessKeyId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
sesSecretAccessKey: z.ZodOptional<z.ZodString>;
|
|
25
|
+
sesRegion: z.ZodOptional<z.ZodString>;
|
|
22
26
|
to: z.ZodString;
|
|
23
27
|
subject: z.ZodString;
|
|
24
28
|
text: z.ZodString;
|
|
25
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>>>;
|
|
26
39
|
}, z.core.$strip>;
|
|
27
40
|
type SendEmailParams = z.infer<typeof sendEmailParams>;
|
|
28
41
|
export declare const sendEmailTool: {
|
|
@@ -33,6 +46,7 @@ export declare const sendEmailTool: {
|
|
|
33
46
|
smtp: "smtp";
|
|
34
47
|
sendgrid: "sendgrid";
|
|
35
48
|
mailgun: "mailgun";
|
|
49
|
+
ses: "ses";
|
|
36
50
|
}>>;
|
|
37
51
|
fromAddress: z.ZodOptional<z.ZodString>;
|
|
38
52
|
fromName: z.ZodOptional<z.ZodString>;
|
|
@@ -48,10 +62,22 @@ export declare const sendEmailTool: {
|
|
|
48
62
|
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
49
63
|
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
50
64
|
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
65
|
+
sesAccessKeyId: z.ZodOptional<z.ZodString>;
|
|
66
|
+
sesSecretAccessKey: z.ZodOptional<z.ZodString>;
|
|
67
|
+
sesRegion: z.ZodOptional<z.ZodString>;
|
|
51
68
|
to: z.ZodString;
|
|
52
69
|
subject: z.ZodString;
|
|
53
70
|
text: z.ZodString;
|
|
54
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>>>;
|
|
55
81
|
}, z.core.$strip>;
|
|
56
82
|
readonly execute: (params: SendEmailParams) => Promise<string>;
|
|
57
83
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
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
|
|
7
|
-
.enum(["smtp", "sendgrid", "mailgun"])
|
|
7
|
+
.enum(["smtp", "sendgrid", "mailgun", "ses"])
|
|
8
8
|
.optional()
|
|
9
9
|
.describe("Mail driver. Required when not configured via env vars (MAIL_MAILER)."),
|
|
10
10
|
fromAddress: z
|
|
@@ -48,6 +48,19 @@ const sendEmailParams = z.object({
|
|
|
48
48
|
.string()
|
|
49
49
|
.optional()
|
|
50
50
|
.describe("Mailgun sending domain. Required when mailer=mailgun."),
|
|
51
|
+
// Amazon SES
|
|
52
|
+
sesAccessKeyId: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("AWS IAM Access Key ID. Required when mailer=ses."),
|
|
56
|
+
sesSecretAccessKey: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("AWS IAM Secret Access Key. Required when mailer=ses."),
|
|
60
|
+
sesRegion: z
|
|
61
|
+
.string()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("AWS region for SES (default us-east-1). Used when mailer=ses."),
|
|
51
64
|
// ── Message ──────────────────────────────────────────────────────────────
|
|
52
65
|
to: z.string().email().describe("Recipient email address."),
|
|
53
66
|
subject: z.string().min(1).describe("Email subject line."),
|
|
@@ -56,6 +69,30 @@ const sendEmailParams = z.object({
|
|
|
56
69
|
.string()
|
|
57
70
|
.optional()
|
|
58
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."),
|
|
59
96
|
});
|
|
60
97
|
export const sendEmailTool = {
|
|
61
98
|
name: "EMAIL_SEND",
|
|
@@ -76,9 +113,22 @@ export const sendEmailTool = {
|
|
|
76
113
|
sendgridApiKey: params.sendgridApiKey,
|
|
77
114
|
mailgunApiKey: params.mailgunApiKey,
|
|
78
115
|
mailgunDomain: params.mailgunDomain,
|
|
116
|
+
sesAccessKeyId: params.sesAccessKeyId,
|
|
117
|
+
sesSecretAccessKey: params.sesSecretAccessKey,
|
|
118
|
+
sesRegion: params.sesRegion,
|
|
79
119
|
})
|
|
80
120
|
: getEmailService();
|
|
81
|
-
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
|
+
});
|
|
82
132
|
return `Email sent successfully to ${params.to}.`;
|
|
83
133
|
}
|
|
84
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.4.1",
|
|
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": {
|