@impruthvi/nodemail 0.2.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 (43) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/LICENSE +21 -0
  3. package/README.md +323 -0
  4. package/dist/core/MailFacade.d.ts +13 -0
  5. package/dist/core/MailFacade.d.ts.map +1 -0
  6. package/dist/core/MailFacade.js +30 -0
  7. package/dist/core/MailFacade.js.map +1 -0
  8. package/dist/core/MailManager.d.ts +23 -0
  9. package/dist/core/MailManager.d.ts.map +1 -0
  10. package/dist/core/MailManager.js +91 -0
  11. package/dist/core/MailManager.js.map +1 -0
  12. package/dist/core/Mailable.d.ts +12 -0
  13. package/dist/core/Mailable.d.ts.map +1 -0
  14. package/dist/core/Mailable.js +38 -0
  15. package/dist/core/Mailable.js.map +1 -0
  16. package/dist/core/Message.d.ts +17 -0
  17. package/dist/core/Message.d.ts.map +1 -0
  18. package/dist/core/Message.js +62 -0
  19. package/dist/core/Message.js.map +1 -0
  20. package/dist/index.d.ts +10 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +34 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/providers/SendGridProvider.d.ts +7 -0
  25. package/dist/providers/SendGridProvider.d.ts.map +1 -0
  26. package/dist/providers/SendGridProvider.js +72 -0
  27. package/dist/providers/SendGridProvider.js.map +1 -0
  28. package/dist/providers/SesProvider.d.ts +7 -0
  29. package/dist/providers/SesProvider.d.ts.map +1 -0
  30. package/dist/providers/SesProvider.js +97 -0
  31. package/dist/providers/SesProvider.js.map +1 -0
  32. package/dist/providers/SmtpProvider.d.ts +8 -0
  33. package/dist/providers/SmtpProvider.d.ts.map +1 -0
  34. package/dist/providers/SmtpProvider.js +81 -0
  35. package/dist/providers/SmtpProvider.js.map +1 -0
  36. package/dist/types/index.d.ts +92 -0
  37. package/dist/types/index.d.ts.map +1 -0
  38. package/dist/types/index.js +3 -0
  39. package/dist/types/index.js.map +1 -0
  40. package/examples/aws-ses.ts +46 -0
  41. package/examples/basic-smtp.ts +50 -0
  42. package/examples/sendgrid.ts +44 -0
  43. package/package.json +117 -0
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Message = void 0;
4
+ class Message {
5
+ options = {};
6
+ to(address) {
7
+ this.options.to = address;
8
+ return this;
9
+ }
10
+ from(address) {
11
+ this.options.from = address;
12
+ return this;
13
+ }
14
+ subject(subject) {
15
+ this.options.subject = subject;
16
+ return this;
17
+ }
18
+ html(html) {
19
+ this.options.html = html;
20
+ return this;
21
+ }
22
+ text(text) {
23
+ this.options.text = text;
24
+ return this;
25
+ }
26
+ cc(address) {
27
+ this.options.cc = address;
28
+ return this;
29
+ }
30
+ bcc(address) {
31
+ this.options.bcc = address;
32
+ return this;
33
+ }
34
+ replyTo(address) {
35
+ this.options.replyTo = address;
36
+ return this;
37
+ }
38
+ attach(attachment) {
39
+ if (!this.options.attachments) {
40
+ this.options.attachments = [];
41
+ }
42
+ this.options.attachments.push(attachment);
43
+ return this;
44
+ }
45
+ header(name, value) {
46
+ if (!this.options.headers) {
47
+ this.options.headers = {};
48
+ }
49
+ this.options.headers[name] = value;
50
+ return this;
51
+ }
52
+ template(name, data) {
53
+ this.options.template = name;
54
+ this.options.data = data;
55
+ return this;
56
+ }
57
+ toOptions() {
58
+ return this.options;
59
+ }
60
+ }
61
+ exports.Message = Message;
62
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/core/Message.ts"],"names":[],"mappings":";;;AAMA,MAAa,OAAO;IACV,OAAO,GAAyB,EAAE,CAAC;IAK3C,EAAE,CAAC,OAAwD;QACzD,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,CAAC,OAA6B;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,EAAE,CAAC,OAAwD;QACzD,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,GAAG,CAAC,OAAwD;QAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,OAAO,CAAC,OAA6B;QACnC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,MAAM,CAAC,UAAsB;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,QAAQ,CAAC,IAAY,EAAE,IAA6B;QAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAxGD,0BAwGC"}
@@ -0,0 +1,10 @@
1
+ export { Mail } from './core/MailFacade';
2
+ export { MailManager } from './core/MailManager';
3
+ export { Mailable } from './core/Mailable';
4
+ export { Message } from './core/Message';
5
+ export { SmtpProvider } from './providers/SmtpProvider';
6
+ export { SendGridProvider } from './providers/SendGridProvider';
7
+ export { SesProvider } from './providers/SesProvider';
8
+ export * from './types';
9
+ export declare const VERSION = "0.1.0";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,cAAc,SAAS,CAAC;AAGxB,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.VERSION = exports.SesProvider = exports.SendGridProvider = exports.SmtpProvider = exports.Message = exports.Mailable = exports.MailManager = exports.Mail = void 0;
18
+ var MailFacade_1 = require("./core/MailFacade");
19
+ Object.defineProperty(exports, "Mail", { enumerable: true, get: function () { return MailFacade_1.Mail; } });
20
+ var MailManager_1 = require("./core/MailManager");
21
+ Object.defineProperty(exports, "MailManager", { enumerable: true, get: function () { return MailManager_1.MailManager; } });
22
+ var Mailable_1 = require("./core/Mailable");
23
+ Object.defineProperty(exports, "Mailable", { enumerable: true, get: function () { return Mailable_1.Mailable; } });
24
+ var Message_1 = require("./core/Message");
25
+ Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return Message_1.Message; } });
26
+ var SmtpProvider_1 = require("./providers/SmtpProvider");
27
+ Object.defineProperty(exports, "SmtpProvider", { enumerable: true, get: function () { return SmtpProvider_1.SmtpProvider; } });
28
+ var SendGridProvider_1 = require("./providers/SendGridProvider");
29
+ Object.defineProperty(exports, "SendGridProvider", { enumerable: true, get: function () { return SendGridProvider_1.SendGridProvider; } });
30
+ var SesProvider_1 = require("./providers/SesProvider");
31
+ Object.defineProperty(exports, "SesProvider", { enumerable: true, get: function () { return SesProvider_1.SesProvider; } });
32
+ __exportStar(require("./types"), exports);
33
+ exports.VERSION = '0.1.0';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,gDAAyC;AAAhC,kGAAA,IAAI,OAAA;AACb,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAGhB,yDAAwD;AAA/C,4GAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AACzB,uDAAsD;AAA7C,0GAAA,WAAW,OAAA;AAGpB,0CAAwB;AAGX,QAAA,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { MailOptions, MailResponse, SendGridConfig } from '../types';
2
+ export declare class SendGridProvider {
3
+ private apiKey;
4
+ constructor(config: SendGridConfig);
5
+ send(options: MailOptions): Promise<MailResponse>;
6
+ }
7
+ //# sourceMappingURL=SendGridProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendGridProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SendGridProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAiClF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,cAAc;IAW5B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAyCxD"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendGridProvider = void 0;
4
+ let sendGridMail = null;
5
+ try {
6
+ sendGridMail = require('@sendgrid/mail');
7
+ }
8
+ catch {
9
+ }
10
+ function formatAddress(address) {
11
+ if (typeof address === 'string') {
12
+ return address;
13
+ }
14
+ return address.name ? `${address.name} <${address.address}>` : address.address;
15
+ }
16
+ function formatAddresses(addresses) {
17
+ if (Array.isArray(addresses)) {
18
+ return addresses.map((addr) => formatAddress(addr));
19
+ }
20
+ return formatAddress(addresses);
21
+ }
22
+ class SendGridProvider {
23
+ apiKey;
24
+ constructor(config) {
25
+ if (!sendGridMail) {
26
+ throw new Error('SendGrid provider requires @sendgrid/mail package. Install it with: npm install @sendgrid/mail');
27
+ }
28
+ this.apiKey = config.apiKey;
29
+ sendGridMail.setApiKey(this.apiKey);
30
+ }
31
+ async send(options) {
32
+ if (!sendGridMail) {
33
+ return {
34
+ success: false,
35
+ error: 'SendGrid not available',
36
+ };
37
+ }
38
+ try {
39
+ const msg = {
40
+ to: formatAddresses(options.to),
41
+ from: options.from ? formatAddress(options.from) : undefined,
42
+ subject: options.subject,
43
+ text: options.text,
44
+ html: options.html,
45
+ cc: options.cc ? formatAddresses(options.cc) : undefined,
46
+ bcc: options.bcc ? formatAddresses(options.bcc) : undefined,
47
+ replyTo: options.replyTo ? formatAddress(options.replyTo) : undefined,
48
+ attachments: options.attachments?.map((att) => ({
49
+ filename: att.filename,
50
+ content: att.content?.toString('base64') ?? '',
51
+ type: att.contentType,
52
+ disposition: 'attachment',
53
+ })),
54
+ headers: options.headers,
55
+ };
56
+ const [response] = await sendGridMail.send(msg);
57
+ return {
58
+ success: true,
59
+ messageId: response.headers['x-message-id'],
60
+ response: `${response.statusCode} ${response.statusMessage ?? ''}`,
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ success: false,
66
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
67
+ };
68
+ }
69
+ }
70
+ }
71
+ exports.SendGridProvider = SendGridProvider;
72
+ //# sourceMappingURL=SendGridProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendGridProvider.js","sourceRoot":"","sources":["../../src/providers/SendGridProvider.ts"],"names":[],"mappings":";;;AAQA,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,IAAI,CAAC;IAEH,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAAC,MAAM,CAAC;AAET,CAAC;AAED,SAAS,aAAa,CAAC,OAA6B;IAClD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CACtB,SAA0D;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAa,gBAAgB;IACnB,MAAM,CAAS;IAEvB,YAAY,MAAsB;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wBAAwB;aAChC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG;gBACV,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC5D,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3D,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBACrE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9C,IAAI,EAAE,GAAG,CAAC,WAAW;oBACrB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;YAEF,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAW;gBACrD,QAAQ,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,aAAa,IAAI,EAAE,EAAE;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAvDD,4CAuDC"}
@@ -0,0 +1,7 @@
1
+ import { MailOptions, MailResponse, SesConfig } from '../types';
2
+ export declare class SesProvider {
3
+ private client;
4
+ constructor(config: SesConfig);
5
+ send(options: MailOptions): Promise<MailResponse>;
6
+ }
7
+ //# sourceMappingURL=SesProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SesProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SesProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,UAAU,CAAC;AAuC7E,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAoBvB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CA0DxD"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SesProvider = void 0;
4
+ let SESClient = null;
5
+ let SendEmailCommand = null;
6
+ try {
7
+ const sesModule = require('@aws-sdk/client-ses');
8
+ SESClient = sesModule.SESClient;
9
+ SendEmailCommand = sesModule.SendEmailCommand;
10
+ }
11
+ catch {
12
+ }
13
+ function formatAddress(address) {
14
+ if (typeof address === 'string') {
15
+ return address;
16
+ }
17
+ return address.name ? `"${address.name}" <${address.address}>` : address.address;
18
+ }
19
+ function formatAddresses(addresses) {
20
+ if (Array.isArray(addresses)) {
21
+ return addresses.map((addr) => formatAddress(addr));
22
+ }
23
+ return [formatAddress(addresses)];
24
+ }
25
+ class SesProvider {
26
+ client;
27
+ constructor(config) {
28
+ if (!SESClient || !SendEmailCommand) {
29
+ throw new Error('AWS SES provider requires @aws-sdk/client-ses package. Install it with: npm install @aws-sdk/client-ses');
30
+ }
31
+ this.client = new SESClient({
32
+ region: config.region,
33
+ ...(config.accessKeyId && config.secretAccessKey
34
+ ? {
35
+ credentials: {
36
+ accessKeyId: config.accessKeyId,
37
+ secretAccessKey: config.secretAccessKey,
38
+ },
39
+ }
40
+ : {}),
41
+ });
42
+ }
43
+ async send(options) {
44
+ if (!SendEmailCommand) {
45
+ return {
46
+ success: false,
47
+ error: 'AWS SES not available',
48
+ };
49
+ }
50
+ try {
51
+ const body = {};
52
+ if (options.html) {
53
+ body.Html = {
54
+ Charset: 'UTF-8',
55
+ Data: options.html,
56
+ };
57
+ }
58
+ if (options.text) {
59
+ body.Text = {
60
+ Charset: 'UTF-8',
61
+ Data: options.text,
62
+ };
63
+ }
64
+ const params = {
65
+ Source: options.from ? formatAddress(options.from) : undefined,
66
+ Destination: {
67
+ ToAddresses: formatAddresses(options.to),
68
+ CcAddresses: options.cc ? formatAddresses(options.cc) : undefined,
69
+ BccAddresses: options.bcc ? formatAddresses(options.bcc) : undefined,
70
+ },
71
+ Message: {
72
+ Subject: {
73
+ Charset: 'UTF-8',
74
+ Data: options.subject,
75
+ },
76
+ Body: body,
77
+ },
78
+ ReplyToAddresses: options.replyTo ? [formatAddress(options.replyTo)] : undefined,
79
+ };
80
+ const command = new SendEmailCommand(params);
81
+ const response = await this.client.send(command);
82
+ return {
83
+ success: true,
84
+ messageId: response.MessageId ?? '',
85
+ response: 'Email sent via AWS SES',
86
+ };
87
+ }
88
+ catch (error) {
89
+ return {
90
+ success: false,
91
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
92
+ };
93
+ }
94
+ }
95
+ }
96
+ exports.SesProvider = SesProvider;
97
+ //# sourceMappingURL=SesProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SesProvider.js","sourceRoot":"","sources":["../../src/providers/SesProvider.ts"],"names":[],"mappings":";;;AASA,IAAI,SAAS,GAAgD,IAAI,CAAC;AAClE,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD,IAAI,CAAC;IAEH,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEjD,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAEhC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;AAChD,CAAC;AAAC,MAAM,CAAC;AAET,CAAC;AAED,SAAS,aAAa,CAAC,OAA6B;IAClD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,SAAS,eAAe,CACtB,SAA0D;IAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAa,WAAW;IACd,MAAM,CAAY;IAE1B,YAAY,MAAiB;QAC3B,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe;gBAC9C,CAAC,CAAC;oBACE,WAAW,EAAE;wBACX,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;qBACxC;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uBAAuB;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YAEH,MAAM,IAAI,GAA2F,EAAE,CAAC;YAExG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,GAAG;oBACV,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,GAAG;oBACV,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC9D,WAAW,EAAE;oBACX,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;oBACjE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;iBACrE;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,OAAO,CAAC,OAAO;qBACtB;oBACD,IAAI,EAAE,IAAI;iBACX;gBACD,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;gBACnC,QAAQ,EAAE,wBAAwB;aACnC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACzE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAjFD,kCAiFC"}
@@ -0,0 +1,8 @@
1
+ import { MailOptions, MailResponse, SmtpConfig } from '../types';
2
+ export declare class SmtpProvider {
3
+ private transporter;
4
+ constructor(config: SmtpConfig);
5
+ send(options: MailOptions): Promise<MailResponse>;
6
+ verify(): Promise<boolean>;
7
+ }
8
+ //# sourceMappingURL=SmtpProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmtpProvider.d.ts","sourceRoot":"","sources":["../../src/providers/SmtpProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAkB9E,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,UAAU;IAexB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAqCjD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CASjC"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SmtpProvider = void 0;
7
+ const nodemailer_1 = __importDefault(require("nodemailer"));
8
+ function formatAddress(address) {
9
+ if (typeof address === 'string') {
10
+ return address;
11
+ }
12
+ return address.name ? `"${address.name}" <${address.address}>` : address.address;
13
+ }
14
+ function formatAddresses(addresses) {
15
+ if (Array.isArray(addresses)) {
16
+ return addresses.map((addr) => formatAddress(addr)).join(', ');
17
+ }
18
+ return formatAddress(addresses);
19
+ }
20
+ class SmtpProvider {
21
+ transporter;
22
+ constructor(config) {
23
+ this.transporter = nodemailer_1.default.createTransport({
24
+ host: config.host,
25
+ port: config.port,
26
+ secure: config.secure ?? false,
27
+ auth: config.auth
28
+ ? {
29
+ user: String(config.auth.user),
30
+ pass: String(config.auth.pass),
31
+ }
32
+ : undefined,
33
+ ...config.options,
34
+ });
35
+ }
36
+ async send(options) {
37
+ try {
38
+ const mailOptions = {
39
+ from: options.from ? formatAddress(options.from) : undefined,
40
+ to: formatAddresses(options.to),
41
+ cc: options.cc ? formatAddresses(options.cc) : undefined,
42
+ bcc: options.bcc ? formatAddresses(options.bcc) : undefined,
43
+ subject: options.subject,
44
+ text: options.text,
45
+ html: options.html,
46
+ attachments: options.attachments?.map((att) => ({
47
+ filename: att.filename,
48
+ content: att.content,
49
+ path: att.path,
50
+ contentType: att.contentType,
51
+ })),
52
+ replyTo: options.replyTo ? formatAddress(options.replyTo) : undefined,
53
+ headers: options.headers,
54
+ };
55
+ const info = await this.transporter.sendMail(mailOptions);
56
+ return {
57
+ success: true,
58
+ messageId: info.messageId ?? '',
59
+ response: info.response ?? '',
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ success: false,
65
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
66
+ };
67
+ }
68
+ }
69
+ async verify() {
70
+ try {
71
+ await this.transporter.verify();
72
+ return true;
73
+ }
74
+ catch (error) {
75
+ console.error('SMTP verification failed:', error);
76
+ return false;
77
+ }
78
+ }
79
+ }
80
+ exports.SmtpProvider = SmtpProvider;
81
+ //# sourceMappingURL=SmtpProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmtpProvider.js","sourceRoot":"","sources":["../../src/providers/SmtpProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export interface MailConfig {
2
+ default: string;
3
+ from: {
4
+ address: string;
5
+ name: string;
6
+ };
7
+ mailers: Record<string, MailerConfig>;
8
+ }
9
+ export interface MailerConfig {
10
+ driver: 'smtp' | 'sendgrid' | 'ses' | 'mailgun' | 'resend' | 'postmark' | 'mailtrap';
11
+ [key: string]: unknown;
12
+ }
13
+ export interface SmtpConfig extends MailerConfig {
14
+ driver: 'smtp';
15
+ host: string;
16
+ port: number;
17
+ username?: string;
18
+ password?: string;
19
+ encryption?: 'tls' | 'ssl';
20
+ secure?: boolean;
21
+ auth?: {
22
+ user: string;
23
+ pass: string;
24
+ };
25
+ options?: Record<string, unknown>;
26
+ }
27
+ export interface SendGridConfig extends MailerConfig {
28
+ driver: 'sendgrid';
29
+ apiKey: string;
30
+ }
31
+ export interface SesConfig extends MailerConfig {
32
+ driver: 'ses';
33
+ region: string;
34
+ accessKeyId?: string;
35
+ secretAccessKey?: string;
36
+ }
37
+ export interface MailgunConfig extends MailerConfig {
38
+ driver: 'mailgun';
39
+ domain: string;
40
+ apiKey: string;
41
+ region?: 'us' | 'eu';
42
+ }
43
+ export interface ResendConfig extends MailerConfig {
44
+ driver: 'resend';
45
+ apiKey: string;
46
+ }
47
+ export interface PostmarkConfig extends MailerConfig {
48
+ driver: 'postmark';
49
+ serverToken: string;
50
+ }
51
+ export interface MailtrapConfig extends MailerConfig {
52
+ driver: 'mailtrap';
53
+ token: string;
54
+ inboxId: string;
55
+ }
56
+ export interface MailAddress {
57
+ address: string;
58
+ name?: string;
59
+ }
60
+ export interface Attachment {
61
+ filename: string;
62
+ content?: Buffer | string;
63
+ path?: string;
64
+ contentType?: string;
65
+ cid?: string;
66
+ }
67
+ export interface MailOptions {
68
+ to: string | string[] | MailAddress | MailAddress[];
69
+ from?: string | MailAddress;
70
+ subject: string;
71
+ html?: string;
72
+ text?: string;
73
+ cc?: string | string[] | MailAddress | MailAddress[];
74
+ bcc?: string | string[] | MailAddress | MailAddress[];
75
+ replyTo?: string | MailAddress;
76
+ attachments?: Attachment[];
77
+ headers?: Record<string, string>;
78
+ template?: string;
79
+ data?: Record<string, unknown>;
80
+ }
81
+ export interface MailProvider {
82
+ send(options: MailOptions): Promise<MailResponse>;
83
+ }
84
+ export interface MailResponse {
85
+ success: boolean;
86
+ messageId?: string;
87
+ accepted?: string[];
88
+ rejected?: string[];
89
+ response?: string;
90
+ error?: string;
91
+ }
92
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { Mail } from '../src/index.js';
2
+ import dotenv from 'dotenv';
3
+
4
+ // Load environment variables
5
+ dotenv.config();
6
+
7
+ // Configure mail with AWS SES
8
+ Mail.configure({
9
+ default: 'ses',
10
+ from: {
11
+ address: 'noreply@example.com',
12
+ name: 'Nodemail Test',
13
+ },
14
+ mailers: {
15
+ ses: {
16
+ driver: 'ses',
17
+ region: process.env.AWS_REGION ?? 'us-east-1',
18
+ accessKeyId: process.env.AWS_ACCESS_KEY_ID,
19
+ secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
20
+ },
21
+ },
22
+ });
23
+
24
+ async function sendTestEmail() {
25
+ try {
26
+ console.log('Sending test email via AWS SES...');
27
+
28
+ const result = await Mail.to('test@example.com')
29
+ .subject('Test Email from Nodemail (AWS SES)')
30
+ .html('<h1>Hello from Nodemail!</h1><p>This email was sent via AWS SES.</p>')
31
+ .text('Hello from Nodemail! This email was sent via AWS SES.')
32
+ .send();
33
+
34
+ if (result.success) {
35
+ console.log('✅ Email sent successfully!');
36
+ console.log('Message ID:', result.messageId);
37
+ } else {
38
+ console.error('❌ Failed to send email:', result.error);
39
+ }
40
+ } catch (error) {
41
+ console.error('❌ Error:', error);
42
+ }
43
+ }
44
+
45
+ // Run the test
46
+ sendTestEmail().catch(console.error);
@@ -0,0 +1,50 @@
1
+ import { Mail } from '../src/index.js';
2
+ import dotenv from 'dotenv';
3
+
4
+ // Load environment variables
5
+ dotenv.config();
6
+
7
+ // Configure mail with SMTP
8
+ Mail.configure({
9
+ default: 'smtp',
10
+ from: {
11
+ address: 'noreply@example.com',
12
+ name: 'Nodemail Test',
13
+ },
14
+ mailers: {
15
+ smtp: {
16
+ driver: 'smtp',
17
+ host: process.env.SMTP_HOST ?? 'smtp.mailtrap.io',
18
+ port: Number(process.env.SMTP_PORT) || 587,
19
+ secure: false,
20
+ auth: {
21
+ user: process.env.SMTP_USER ?? '',
22
+ pass: process.env.SMTP_PASS ?? '',
23
+ },
24
+ },
25
+ },
26
+ });
27
+
28
+ async function sendTestEmail() {
29
+ try {
30
+ console.log('Sending test email...');
31
+
32
+ const result = await Mail.to('test@example.com')
33
+ .subject('Test Email from Nodemail')
34
+ .html('<h1>Hello from Nodemail!</h1><p>This is a test email.</p>')
35
+ .text('Hello from Nodemail! This is a test email.')
36
+ .send();
37
+
38
+ if (result.success) {
39
+ console.log('✅ Email sent successfully!');
40
+ console.log('Message ID:', result.messageId);
41
+ } else {
42
+ console.error('❌ Failed to send email:', result.error);
43
+ }
44
+ } catch (error) {
45
+ console.error('❌ Error:', error);
46
+ }
47
+ }
48
+
49
+ // Run the test
50
+ sendTestEmail().catch(console.error);