@n24q02m/better-email-mcp 1.0.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.
Files changed (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/bin/cli.mjs +13 -0
  4. package/build/scripts/start-server.d.ts +6 -0
  5. package/build/scripts/start-server.d.ts.map +1 -0
  6. package/build/scripts/start-server.js +21 -0
  7. package/build/scripts/start-server.js.map +1 -0
  8. package/build/src/docs/attachments.md +48 -0
  9. package/build/src/docs/folders.md +45 -0
  10. package/build/src/docs/messages.md +92 -0
  11. package/build/src/docs/send.md +52 -0
  12. package/build/src/init-server.d.ts +40 -0
  13. package/build/src/init-server.d.ts.map +1 -0
  14. package/build/src/init-server.js +57 -0
  15. package/build/src/init-server.js.map +1 -0
  16. package/build/src/tools/composite/attachments.d.ts +17 -0
  17. package/build/src/tools/composite/attachments.d.ts.map +1 -0
  18. package/build/src/tools/composite/attachments.js +77 -0
  19. package/build/src/tools/composite/attachments.js.map +1 -0
  20. package/build/src/tools/composite/attachments.test.d.ts +2 -0
  21. package/build/src/tools/composite/attachments.test.d.ts.map +1 -0
  22. package/build/src/tools/composite/attachments.test.js +138 -0
  23. package/build/src/tools/composite/attachments.test.js.map +1 -0
  24. package/build/src/tools/composite/folders.d.ts +14 -0
  25. package/build/src/tools/composite/folders.d.ts.map +1 -0
  26. package/build/src/tools/composite/folders.js +57 -0
  27. package/build/src/tools/composite/folders.js.map +1 -0
  28. package/build/src/tools/composite/folders.test.d.ts +2 -0
  29. package/build/src/tools/composite/folders.test.d.ts.map +1 -0
  30. package/build/src/tools/composite/folders.test.js +61 -0
  31. package/build/src/tools/composite/folders.test.js.map +1 -0
  32. package/build/src/tools/composite/messages.d.ts +20 -0
  33. package/build/src/tools/composite/messages.d.ts.map +1 -0
  34. package/build/src/tools/composite/messages.js +244 -0
  35. package/build/src/tools/composite/messages.js.map +1 -0
  36. package/build/src/tools/composite/messages.test.d.ts +2 -0
  37. package/build/src/tools/composite/messages.test.d.ts.map +1 -0
  38. package/build/src/tools/composite/messages.test.js +217 -0
  39. package/build/src/tools/composite/messages.test.js.map +1 -0
  40. package/build/src/tools/composite/send.d.ts +21 -0
  41. package/build/src/tools/composite/send.d.ts.map +1 -0
  42. package/build/src/tools/composite/send.js +127 -0
  43. package/build/src/tools/composite/send.js.map +1 -0
  44. package/build/src/tools/composite/send.test.d.ts +2 -0
  45. package/build/src/tools/composite/send.test.d.ts.map +1 -0
  46. package/build/src/tools/composite/send.test.js +232 -0
  47. package/build/src/tools/composite/send.test.js.map +1 -0
  48. package/build/src/tools/helpers/config.d.ts +33 -0
  49. package/build/src/tools/helpers/config.d.ts.map +1 -0
  50. package/build/src/tools/helpers/config.js +167 -0
  51. package/build/src/tools/helpers/config.js.map +1 -0
  52. package/build/src/tools/helpers/config.test.d.ts +2 -0
  53. package/build/src/tools/helpers/config.test.d.ts.map +1 -0
  54. package/build/src/tools/helpers/config.test.js +141 -0
  55. package/build/src/tools/helpers/config.test.js.map +1 -0
  56. package/build/src/tools/helpers/errors.d.ts +34 -0
  57. package/build/src/tools/helpers/errors.d.ts.map +1 -0
  58. package/build/src/tools/helpers/errors.js +152 -0
  59. package/build/src/tools/helpers/errors.js.map +1 -0
  60. package/build/src/tools/helpers/errors.test.d.ts +2 -0
  61. package/build/src/tools/helpers/errors.test.d.ts.map +1 -0
  62. package/build/src/tools/helpers/errors.test.js +203 -0
  63. package/build/src/tools/helpers/errors.test.js.map +1 -0
  64. package/build/src/tools/helpers/html-utils.d.ts +10 -0
  65. package/build/src/tools/helpers/html-utils.d.ts.map +1 -0
  66. package/build/src/tools/helpers/html-utils.js +29 -0
  67. package/build/src/tools/helpers/html-utils.js.map +1 -0
  68. package/build/src/tools/helpers/html-utils.test.d.ts +2 -0
  69. package/build/src/tools/helpers/html-utils.test.d.ts.map +1 -0
  70. package/build/src/tools/helpers/html-utils.test.js +103 -0
  71. package/build/src/tools/helpers/html-utils.test.js.map +1 -0
  72. package/build/src/tools/helpers/imap-client.d.ts +90 -0
  73. package/build/src/tools/helpers/imap-client.d.ts.map +1 -0
  74. package/build/src/tools/helpers/imap-client.js +321 -0
  75. package/build/src/tools/helpers/imap-client.js.map +1 -0
  76. package/build/src/tools/helpers/imap-client.test.d.ts +2 -0
  77. package/build/src/tools/helpers/imap-client.test.d.ts.map +1 -0
  78. package/build/src/tools/helpers/imap-client.test.js +401 -0
  79. package/build/src/tools/helpers/imap-client.test.js.map +1 -0
  80. package/build/src/tools/helpers/smtp-client.d.ts +38 -0
  81. package/build/src/tools/helpers/smtp-client.d.ts.map +1 -0
  82. package/build/src/tools/helpers/smtp-client.js +124 -0
  83. package/build/src/tools/helpers/smtp-client.js.map +1 -0
  84. package/build/src/tools/helpers/smtp-client.test.d.ts +2 -0
  85. package/build/src/tools/helpers/smtp-client.test.d.ts.map +1 -0
  86. package/build/src/tools/helpers/smtp-client.test.js +210 -0
  87. package/build/src/tools/helpers/smtp-client.test.js.map +1 -0
  88. package/build/src/tools/registry.d.ts +11 -0
  89. package/build/src/tools/registry.d.ts.map +1 -0
  90. package/build/src/tools/registry.js +262 -0
  91. package/build/src/tools/registry.js.map +1 -0
  92. package/build/src/tools/registry.test.d.ts +2 -0
  93. package/build/src/tools/registry.test.d.ts.map +1 -0
  94. package/build/src/tools/registry.test.js +135 -0
  95. package/build/src/tools/registry.test.js.map +1 -0
  96. package/build/tsconfig.tsbuildinfo +1 -0
  97. package/package.json +81 -0
@@ -0,0 +1,401 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ // --- Mocks (vi.hoisted ensures availability in vi.mock factory) ---
3
+ const { mockClient, mockRelease } = vi.hoisted(() => {
4
+ const mockRelease = vi.fn();
5
+ const mockClient = {
6
+ connect: vi.fn().mockResolvedValue(undefined),
7
+ logout: vi.fn().mockResolvedValue(undefined),
8
+ getMailboxLock: vi.fn().mockResolvedValue({ release: mockRelease }),
9
+ fetch: vi.fn(),
10
+ fetchOne: vi.fn(),
11
+ messageFlagsAdd: vi.fn().mockResolvedValue(undefined),
12
+ messageFlagsRemove: vi.fn().mockResolvedValue(undefined),
13
+ messageMove: vi.fn().mockResolvedValue(undefined),
14
+ messageDelete: vi.fn().mockResolvedValue(undefined),
15
+ list: vi.fn()
16
+ };
17
+ return { mockClient, mockRelease };
18
+ });
19
+ vi.mock('imapflow', () => ({
20
+ // biome-ignore lint/complexity/useArrowFunction: must use function keyword for `new` constructor mock
21
+ ImapFlow: vi.fn(function () {
22
+ return mockClient;
23
+ })
24
+ }));
25
+ vi.mock('mailparser', () => ({
26
+ simpleParser: vi.fn()
27
+ }));
28
+ vi.mock('./html-utils.js', () => ({
29
+ htmlToCleanText: vi.fn((html) => `cleaned: ${html}`)
30
+ }));
31
+ import { simpleParser } from 'mailparser';
32
+ import { getAttachment, listFolders, modifyFlags, moveEmails, readEmail, searchEmails, trashEmails } from './imap-client.js';
33
+ const mockSimpleParser = vi.mocked(simpleParser);
34
+ const account = {
35
+ id: 'test_gmail_com',
36
+ email: 'test@gmail.com',
37
+ password: 'testpass',
38
+ imap: { host: 'imap.gmail.com', port: 993, secure: true },
39
+ smtp: { host: 'smtp.gmail.com', port: 465, secure: true }
40
+ };
41
+ /** Create async iterable from array (for ImapFlow.fetch) */
42
+ function toAsyncIterable(items) {
43
+ return {
44
+ [Symbol.asyncIterator]() {
45
+ let i = 0;
46
+ return {
47
+ async next() {
48
+ if (i < items.length)
49
+ return { value: items[i++], done: false };
50
+ return { value: undefined, done: true };
51
+ }
52
+ };
53
+ }
54
+ };
55
+ }
56
+ beforeEach(() => {
57
+ vi.clearAllMocks();
58
+ mockClient.connect.mockResolvedValue(undefined);
59
+ mockClient.logout.mockResolvedValue(undefined);
60
+ mockClient.getMailboxLock.mockResolvedValue({ release: mockRelease });
61
+ mockClient.messageFlagsAdd.mockResolvedValue(undefined);
62
+ mockClient.messageFlagsRemove.mockResolvedValue(undefined);
63
+ mockClient.messageMove.mockResolvedValue(undefined);
64
+ mockClient.messageDelete.mockResolvedValue(undefined);
65
+ });
66
+ // ============================================================================
67
+ // searchEmails
68
+ // ============================================================================
69
+ describe('searchEmails', () => {
70
+ it('searches with default UNSEEN criteria', async () => {
71
+ const msgs = [
72
+ {
73
+ uid: 1,
74
+ flags: new Set(['\\Seen']),
75
+ envelope: {
76
+ messageId: '<msg1@test>',
77
+ subject: 'Hello',
78
+ from: [{ name: 'Sender', address: 'sender@test.com' }],
79
+ to: [{ address: 'test@gmail.com' }],
80
+ date: new Date('2025-01-01')
81
+ },
82
+ source: Buffer.from('Preview text here')
83
+ }
84
+ ];
85
+ mockClient.fetch.mockReturnValue(toAsyncIterable(msgs));
86
+ const results = await searchEmails([account], 'UNSEEN', 'INBOX', 20);
87
+ expect(results).toHaveLength(1);
88
+ expect(results[0].uid).toBe(1);
89
+ expect(results[0].subject).toBe('Hello');
90
+ expect(results[0].from).toContain('sender@test.com');
91
+ expect(results[0].account_email).toBe('test@gmail.com');
92
+ expect(results[0].snippet).toBe('Preview text here');
93
+ expect(mockRelease).toHaveBeenCalled();
94
+ });
95
+ it('respects the limit parameter', async () => {
96
+ const msgs = Array.from({ length: 5 }, (_, i) => ({
97
+ uid: i + 1,
98
+ flags: new Set(),
99
+ envelope: {
100
+ messageId: `<msg${i + 1}@test>`,
101
+ subject: `Email ${i + 1}`,
102
+ from: [{ name: '', address: 'sender@test.com' }],
103
+ to: [{ address: 'test@gmail.com' }],
104
+ date: new Date()
105
+ },
106
+ source: Buffer.from('text')
107
+ }));
108
+ mockClient.fetch.mockReturnValue(toAsyncIterable(msgs));
109
+ const results = await searchEmails([account], 'ALL', 'INBOX', 3);
110
+ expect(results).toHaveLength(3);
111
+ });
112
+ it('searches across multiple accounts', async () => {
113
+ const account2 = {
114
+ ...account,
115
+ id: 'user2_gmail_com',
116
+ email: 'user2@gmail.com'
117
+ };
118
+ const msg = {
119
+ uid: 1,
120
+ flags: new Set(),
121
+ envelope: {
122
+ subject: 'Test',
123
+ from: [{ address: 'x@test.com' }],
124
+ to: [{ address: 'y@test.com' }],
125
+ date: new Date()
126
+ },
127
+ source: Buffer.from('text')
128
+ };
129
+ mockClient.fetch.mockReturnValue(toAsyncIterable([msg]));
130
+ const results = await searchEmails([account, account2], 'ALL', 'INBOX', 10);
131
+ // Should have results from both accounts
132
+ expect(results).toHaveLength(2);
133
+ expect(results[0].account_email).toBe('test@gmail.com');
134
+ expect(results[1].account_email).toBe('user2@gmail.com');
135
+ });
136
+ it('includes error entry when account fails', async () => {
137
+ mockClient.connect.mockRejectedValue(new Error('Connection refused'));
138
+ const results = await searchEmails([account], 'ALL', 'INBOX', 10);
139
+ expect(results).toHaveLength(1);
140
+ expect(results[0].uid).toBe(0);
141
+ expect(results[0].subject).toContain('[ERROR]');
142
+ expect(results[0].snippet).toContain('Connection refused');
143
+ });
144
+ it('handles empty search results', async () => {
145
+ mockClient.fetch.mockReturnValue(toAsyncIterable([]));
146
+ const results = await searchEmails([account], 'UNSEEN', 'INBOX', 20);
147
+ expect(results).toHaveLength(0);
148
+ });
149
+ it('handles missing envelope fields gracefully', async () => {
150
+ mockClient.fetch.mockReturnValue(toAsyncIterable([
151
+ {
152
+ uid: 1,
153
+ flags: new Set(),
154
+ envelope: {},
155
+ source: null
156
+ }
157
+ ]));
158
+ const results = await searchEmails([account], 'ALL', 'INBOX', 10);
159
+ expect(results).toHaveLength(1);
160
+ expect(results[0].subject).toBe('(No subject)');
161
+ expect(results[0].from).toBe('');
162
+ expect(results[0].snippet).toBe('');
163
+ });
164
+ });
165
+ // ============================================================================
166
+ // readEmail
167
+ // ============================================================================
168
+ describe('readEmail', () => {
169
+ it('reads email by UID and returns detail', async () => {
170
+ mockClient.fetchOne.mockResolvedValue({
171
+ uid: 42,
172
+ flags: new Set(['\\Seen']),
173
+ source: Buffer.from('raw email source')
174
+ });
175
+ mockSimpleParser.mockResolvedValue({
176
+ messageId: '<msg42@test>',
177
+ inReplyTo: '<parent@test>',
178
+ references: '<ref1@test> <ref2@test>',
179
+ subject: 'Test Subject',
180
+ from: { text: 'Sender <sender@test.com>' },
181
+ to: { text: 'test@gmail.com' },
182
+ cc: undefined,
183
+ bcc: undefined,
184
+ date: new Date('2025-06-01'),
185
+ text: 'Plain text body',
186
+ html: null,
187
+ attachments: [{ filename: 'doc.pdf', contentType: 'application/pdf', size: 1024 }]
188
+ });
189
+ const result = await readEmail(account, 42, 'INBOX');
190
+ expect(result.uid).toBe(42);
191
+ expect(result.subject).toBe('Test Subject');
192
+ expect(result.message_id).toBe('<msg42@test>');
193
+ expect(result.body_text).toBe('Plain text body');
194
+ expect(result.attachments).toHaveLength(1);
195
+ expect(result.attachments[0].filename).toBe('doc.pdf');
196
+ expect(mockRelease).toHaveBeenCalled();
197
+ });
198
+ it('falls back to html-to-text when no plain text', async () => {
199
+ mockClient.fetchOne.mockResolvedValue({
200
+ uid: 1,
201
+ flags: new Set(),
202
+ source: Buffer.from('raw')
203
+ });
204
+ mockSimpleParser.mockResolvedValue({
205
+ subject: 'HTML Email',
206
+ from: { text: 'x@test.com' },
207
+ to: { text: 'y@test.com' },
208
+ date: new Date(),
209
+ text: null,
210
+ html: '<p>Hello World</p>',
211
+ attachments: []
212
+ });
213
+ const result = await readEmail(account, 1, 'INBOX');
214
+ expect(result.body_text).toBe('cleaned: <p>Hello World</p>');
215
+ });
216
+ it('shows (Empty body) when no text or html', async () => {
217
+ mockClient.fetchOne.mockResolvedValue({
218
+ uid: 1,
219
+ flags: new Set(),
220
+ source: Buffer.from('raw')
221
+ });
222
+ mockSimpleParser.mockResolvedValue({
223
+ subject: 'Empty',
224
+ from: { text: 'x@test.com' },
225
+ to: { text: 'y@test.com' },
226
+ date: new Date(),
227
+ text: null,
228
+ html: null,
229
+ attachments: []
230
+ });
231
+ const result = await readEmail(account, 1, 'INBOX');
232
+ expect(result.body_text).toBe('(Empty body)');
233
+ });
234
+ it('throws EmailMCPError when email not found', async () => {
235
+ mockClient.fetchOne.mockResolvedValue(false);
236
+ await expect(readEmail(account, 999, 'INBOX')).rejects.toThrow('Email UID 999 not found');
237
+ });
238
+ it('throws when fetchOne returns object without source', async () => {
239
+ mockClient.fetchOne.mockResolvedValue({ uid: 1, source: null });
240
+ await expect(readEmail(account, 1, 'INBOX')).rejects.toThrow('not found');
241
+ });
242
+ });
243
+ // ============================================================================
244
+ // modifyFlags
245
+ // ============================================================================
246
+ describe('modifyFlags', () => {
247
+ it('adds flags to emails', async () => {
248
+ const result = await modifyFlags(account, [1, 2, 3], 'INBOX', ['\\Seen'], 'add');
249
+ expect(mockClient.messageFlagsAdd).toHaveBeenCalledWith({ uid: '1,2,3' }, ['\\Seen']);
250
+ expect(result.success).toBe(true);
251
+ expect(result.modified).toBe(3);
252
+ });
253
+ it('removes flags from emails', async () => {
254
+ const result = await modifyFlags(account, [5], 'INBOX', ['\\Flagged'], 'remove');
255
+ expect(mockClient.messageFlagsRemove).toHaveBeenCalledWith({ uid: '5' }, ['\\Flagged']);
256
+ expect(result.success).toBe(true);
257
+ expect(result.modified).toBe(1);
258
+ });
259
+ it('always releases the mailbox lock', async () => {
260
+ mockClient.messageFlagsAdd.mockRejectedValue(new Error('fail'));
261
+ await expect(modifyFlags(account, [1], 'INBOX', ['\\Seen'], 'add')).rejects.toThrow();
262
+ expect(mockRelease).toHaveBeenCalled();
263
+ });
264
+ });
265
+ // ============================================================================
266
+ // moveEmails
267
+ // ============================================================================
268
+ describe('moveEmails', () => {
269
+ it('moves emails to destination folder', async () => {
270
+ const result = await moveEmails(account, [1, 2], 'INBOX', 'Archive');
271
+ expect(mockClient.messageMove).toHaveBeenCalledWith({ uid: '1,2' }, 'Archive');
272
+ expect(result.success).toBe(true);
273
+ expect(result.moved).toBe(2);
274
+ });
275
+ });
276
+ // ============================================================================
277
+ // trashEmails
278
+ // ============================================================================
279
+ describe('trashEmails', () => {
280
+ it('deletes emails from folder', async () => {
281
+ const result = await trashEmails(account, [3, 4], 'INBOX');
282
+ expect(mockClient.messageDelete).toHaveBeenCalledWith({ uid: '3,4' });
283
+ expect(result.success).toBe(true);
284
+ expect(result.trashed).toBe(2);
285
+ });
286
+ });
287
+ // ============================================================================
288
+ // listFolders
289
+ // ============================================================================
290
+ describe('listFolders', () => {
291
+ it('lists mailbox folders', async () => {
292
+ mockClient.list.mockResolvedValue([
293
+ { name: 'INBOX', path: 'INBOX', flags: new Set(['\\HasNoChildren']), delimiter: '/' },
294
+ { name: '[Gmail]', path: '[Gmail]', flags: new Set(['\\Noselect']), delimiter: '/' }
295
+ ]);
296
+ const result = await listFolders(account);
297
+ expect(result).toHaveLength(2);
298
+ expect(result[0].name).toBe('INBOX');
299
+ expect(result[0].path).toBe('INBOX');
300
+ expect(result[0].flags).toContain('\\HasNoChildren');
301
+ });
302
+ it('handles folders with children', async () => {
303
+ const childFolders = new Map([
304
+ [
305
+ 'Sent',
306
+ {
307
+ name: 'Sent',
308
+ path: '[Gmail]/Sent',
309
+ flags: new Set(['\\Sent']),
310
+ delimiter: '/'
311
+ }
312
+ ]
313
+ ]);
314
+ mockClient.list.mockResolvedValue([
315
+ {
316
+ name: '[Gmail]',
317
+ path: '[Gmail]',
318
+ flags: new Set(['\\Noselect']),
319
+ delimiter: '/',
320
+ folders: childFolders
321
+ }
322
+ ]);
323
+ const result = await listFolders(account);
324
+ expect(result).toHaveLength(1);
325
+ expect(result[0].children).toHaveLength(1);
326
+ expect(result[0].children[0].name).toBe('Sent');
327
+ });
328
+ });
329
+ // ============================================================================
330
+ // getAttachment
331
+ // ============================================================================
332
+ describe('getAttachment', () => {
333
+ it('returns attachment as base64', async () => {
334
+ const content = Buffer.from('file content');
335
+ mockClient.fetchOne.mockResolvedValue({
336
+ uid: 10,
337
+ source: Buffer.from('raw email')
338
+ });
339
+ mockSimpleParser.mockResolvedValue({
340
+ attachments: [
341
+ {
342
+ filename: 'report.pdf',
343
+ contentType: 'application/pdf',
344
+ size: 12345,
345
+ content,
346
+ contentId: 'cid123'
347
+ }
348
+ ]
349
+ });
350
+ const result = await getAttachment(account, 10, 'INBOX', 'report.pdf');
351
+ expect(result.filename).toBe('report.pdf');
352
+ expect(result.content_type).toBe('application/pdf');
353
+ expect(result.size).toBe(12345);
354
+ expect(result.content_base64).toBe(content.toString('base64'));
355
+ });
356
+ it('matches attachment filename case-insensitively', async () => {
357
+ mockClient.fetchOne.mockResolvedValue({ uid: 1, source: Buffer.from('raw') });
358
+ mockSimpleParser.mockResolvedValue({
359
+ attachments: [{ filename: 'Report.PDF', contentType: 'application/pdf', size: 100, content: Buffer.from('x') }]
360
+ });
361
+ const result = await getAttachment(account, 1, 'INBOX', 'report.pdf');
362
+ expect(result.filename).toBe('Report.PDF');
363
+ });
364
+ it('throws when email not found', async () => {
365
+ mockClient.fetchOne.mockResolvedValue(false);
366
+ await expect(getAttachment(account, 999, 'INBOX', 'file.txt')).rejects.toThrow('not found');
367
+ });
368
+ it('throws when attachment not found', async () => {
369
+ mockClient.fetchOne.mockResolvedValue({ uid: 1, source: Buffer.from('raw') });
370
+ mockSimpleParser.mockResolvedValue({
371
+ attachments: [{ filename: 'other.txt', contentType: 'text/plain', size: 10, content: Buffer.from('x') }]
372
+ });
373
+ await expect(getAttachment(account, 1, 'INBOX', 'missing.pdf')).rejects.toThrow('not found');
374
+ });
375
+ });
376
+ // ============================================================================
377
+ // Connection lifecycle
378
+ // ============================================================================
379
+ describe('connection lifecycle', () => {
380
+ it('always calls logout even on error', async () => {
381
+ mockClient.fetchOne.mockRejectedValue(new Error('IMAP error'));
382
+ await expect(readEmail(account, 1, 'INBOX')).rejects.toThrow();
383
+ expect(mockClient.logout).toHaveBeenCalled();
384
+ });
385
+ it('ignores logout errors', async () => {
386
+ mockClient.logout.mockRejectedValue(new Error('logout failed'));
387
+ mockClient.fetchOne.mockResolvedValue({ uid: 1, source: Buffer.from('raw') });
388
+ mockSimpleParser.mockResolvedValue({
389
+ subject: 'Test',
390
+ from: { text: 'x@test.com' },
391
+ to: { text: 'y@test.com' },
392
+ date: new Date(),
393
+ text: 'body',
394
+ attachments: []
395
+ });
396
+ // Should not throw despite logout error
397
+ const result = await readEmail(account, 1, 'INBOX');
398
+ expect(result.subject).toBe('Test');
399
+ });
400
+ });
401
+ //# sourceMappingURL=imap-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imap-client.test.js","sourceRoot":"","sources":["../../../../src/tools/helpers/imap-client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * SMTP Client
3
+ * Send, reply, and forward emails via SMTP using Nodemailer
4
+ */
5
+ import type { AccountConfig } from './config.js';
6
+ export interface SendEmailOptions {
7
+ to: string;
8
+ subject: string;
9
+ body: string;
10
+ cc?: string;
11
+ bcc?: string;
12
+ in_reply_to?: string;
13
+ references?: string;
14
+ }
15
+ /**
16
+ * Send a new email
17
+ */
18
+ export declare function sendNewEmail(account: AccountConfig, options: SendEmailOptions): Promise<{
19
+ success: boolean;
20
+ message_id: string;
21
+ }>;
22
+ /**
23
+ * Reply to an email (maintains thread via In-Reply-To and References headers)
24
+ */
25
+ export declare function replyToEmail(account: AccountConfig, options: SendEmailOptions): Promise<{
26
+ success: boolean;
27
+ message_id: string;
28
+ }>;
29
+ /**
30
+ * Forward an email
31
+ */
32
+ export declare function forwardEmail(account: AccountConfig, options: SendEmailOptions & {
33
+ original_body: string;
34
+ }): Promise<{
35
+ success: boolean;
36
+ message_id: string;
37
+ }>;
38
+ //# sourceMappingURL=smtp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smtp-client.d.ts","sourceRoot":"","sources":["../../../../src/tools/helpers/smtp-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAmCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,gBAAgB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBnD"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * SMTP Client
3
+ * Send, reply, and forward emails via SMTP using Nodemailer
4
+ */
5
+ import { createTransport } from 'nodemailer';
6
+ import { EmailMCPError } from './errors.js';
7
+ /**
8
+ * Create a Nodemailer transporter for the given account
9
+ */
10
+ function createSmtpTransport(account) {
11
+ return createTransport({
12
+ host: account.smtp.host,
13
+ port: account.smtp.port,
14
+ secure: account.smtp.secure,
15
+ auth: {
16
+ user: account.email,
17
+ pass: account.password
18
+ }
19
+ });
20
+ }
21
+ /**
22
+ * Convert markdown-like text to simple HTML for email
23
+ */
24
+ function textToHtml(text) {
25
+ return text
26
+ .split('\n')
27
+ .map((line) => {
28
+ if (line.startsWith('# '))
29
+ return `<h1>${line.substring(2)}</h1>`;
30
+ if (line.startsWith('## '))
31
+ return `<h2>${line.substring(3)}</h2>`;
32
+ if (line.startsWith('### '))
33
+ return `<h3>${line.substring(4)}</h3>`;
34
+ if (line.startsWith('- '))
35
+ return `<li>${line.substring(2)}</li>`;
36
+ if (line.startsWith('**') && line.endsWith('**'))
37
+ return `<b>${line.slice(2, -2)}</b>`;
38
+ if (line.trim() === '')
39
+ return '<br>';
40
+ return `<p>${line}</p>`;
41
+ })
42
+ .join('\n');
43
+ }
44
+ /**
45
+ * Send a new email
46
+ */
47
+ export async function sendNewEmail(account, options) {
48
+ const transport = createSmtpTransport(account);
49
+ try {
50
+ const result = await transport.sendMail({
51
+ from: account.email,
52
+ to: options.to,
53
+ cc: options.cc,
54
+ bcc: options.bcc,
55
+ subject: options.subject,
56
+ text: options.body,
57
+ html: textToHtml(options.body)
58
+ });
59
+ return {
60
+ success: true,
61
+ message_id: result.messageId || ''
62
+ };
63
+ }
64
+ finally {
65
+ transport.close();
66
+ }
67
+ }
68
+ /**
69
+ * Reply to an email (maintains thread via In-Reply-To and References headers)
70
+ */
71
+ export async function replyToEmail(account, options) {
72
+ if (!options.in_reply_to) {
73
+ throw new EmailMCPError('in_reply_to is required for reply', 'MISSING_PARAM', 'Use email_read to get the message_id of the email you want to reply to');
74
+ }
75
+ const transport = createSmtpTransport(account);
76
+ try {
77
+ const subject = options.subject.startsWith('Re:') ? options.subject : `Re: ${options.subject}`;
78
+ const result = await transport.sendMail({
79
+ from: account.email,
80
+ to: options.to,
81
+ cc: options.cc,
82
+ bcc: options.bcc,
83
+ subject,
84
+ text: options.body,
85
+ html: textToHtml(options.body),
86
+ inReplyTo: options.in_reply_to,
87
+ references: options.references || options.in_reply_to
88
+ });
89
+ return {
90
+ success: true,
91
+ message_id: result.messageId || ''
92
+ };
93
+ }
94
+ finally {
95
+ transport.close();
96
+ }
97
+ }
98
+ /**
99
+ * Forward an email
100
+ */
101
+ export async function forwardEmail(account, options) {
102
+ const transport = createSmtpTransport(account);
103
+ try {
104
+ const subject = options.subject.startsWith('Fwd:') ? options.subject : `Fwd: ${options.subject}`;
105
+ const body = `${options.body}\n\n---------- Forwarded message ----------\n${options.original_body}`;
106
+ const result = await transport.sendMail({
107
+ from: account.email,
108
+ to: options.to,
109
+ cc: options.cc,
110
+ bcc: options.bcc,
111
+ subject,
112
+ text: body,
113
+ html: textToHtml(body)
114
+ });
115
+ return {
116
+ success: true,
117
+ message_id: result.messageId || ''
118
+ };
119
+ }
120
+ finally {
121
+ transport.close();
122
+ }
123
+ }
124
+ //# sourceMappingURL=smtp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smtp-client.js","sourceRoot":"","sources":["../../../../src/tools/helpers/smtp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smtp-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smtp-client.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/helpers/smtp-client.test.ts"],"names":[],"mappings":""}