@hedhog/mail 0.45.1 → 0.46.2
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/dist/interfaces/mail-module-options.interface.d.ts +4 -0
- package/dist/interfaces/mail-module-options.interface.d.ts.map +1 -1
- package/dist/mail.service.d.ts +2 -0
- package/dist/mail.service.d.ts.map +1 -1
- package/dist/mail.service.js +40 -4
- package/dist/mail.service.js.map +1 -1
- package/package.json +1 -1
- package/src/interfaces/mail-module-options.interface.ts +4 -0
- package/src/mail.service.ts +52 -5
@@ -1,6 +1,7 @@
|
|
1
1
|
import { ModuleMetadata } from '@nestjs/common';
|
2
2
|
export type MailModuleOptions = {
|
3
3
|
global?: boolean;
|
4
|
+
debug?: boolean;
|
4
5
|
type: 'AWS';
|
5
6
|
region: string;
|
6
7
|
accessKeyId: string;
|
@@ -8,14 +9,17 @@ export type MailModuleOptions = {
|
|
8
9
|
from: string;
|
9
10
|
} | {
|
10
11
|
global?: boolean;
|
12
|
+
debug?: boolean;
|
11
13
|
type: 'SMTP';
|
12
14
|
host: string;
|
13
15
|
port: number;
|
14
16
|
secure?: boolean;
|
15
17
|
username: string;
|
16
18
|
password: string;
|
19
|
+
rejectUnauthorized?: boolean;
|
17
20
|
} | {
|
18
21
|
global?: boolean;
|
22
|
+
debug?: boolean;
|
19
23
|
type: 'GMAIL';
|
20
24
|
clientId: string;
|
21
25
|
clientSecret: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mail-module-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/mail-module-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GACzB;IACE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"mail-module-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/mail-module-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GACzB;IACE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACD;IACE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;CACrE;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IACvC,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;IACpD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB"}
|
package/dist/mail.service.d.ts
CHANGED
@@ -4,7 +4,9 @@ import { Mail } from './mail.consts';
|
|
4
4
|
export declare class MailService {
|
5
5
|
private readonly mailConfig;
|
6
6
|
private readonly httpService;
|
7
|
+
private debug;
|
7
8
|
constructor(mailConfig: MailModuleOptions, httpService: HttpService);
|
9
|
+
private log;
|
8
10
|
send(mail: Mail): Promise<any>;
|
9
11
|
createRawEmail(mail: Mail): Promise<string>;
|
10
12
|
sendWithSMTP(mail: Mail): Promise<any>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../src/mail.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAuB,MAAM,eAAe,CAAC;AAE1D,qBACa,WAAW;
|
1
|
+
{"version":3,"file":"mail.service.d.ts","sourceRoot":"","sources":["../src/mail.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAuB,MAAM,eAAe,CAAC;AAE1D,qBACa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN9B,OAAO,CAAC,KAAK,CAAS;gBAIH,UAAU,EAAE,iBAAiB,EAE7B,WAAW,EAAE,WAAW;IAG3C,OAAO,CAAC,GAAG;IAML,IAAI,CAAC,IAAI,EAAE,IAAI;IAcf,cAAc,CAAC,IAAI,EAAE,IAAI;IA2EzB,YAAY,CAAC,IAAI,EAAE,IAAI;IAsDvB,aAAa,CAAC,IAAI,EAAE,IAAI;;;IAiDxB,WAAW,CAAC,IAAI,EAAE,IAAI;CAoI7B"}
|
package/dist/mail.service.js
CHANGED
@@ -56,8 +56,15 @@ let MailService = class MailService {
|
|
56
56
|
constructor(mailConfig, httpService) {
|
57
57
|
this.mailConfig = mailConfig;
|
58
58
|
this.httpService = httpService;
|
59
|
+
this.debug = false;
|
60
|
+
}
|
61
|
+
log(...args) {
|
62
|
+
if (this.debug) {
|
63
|
+
console.log(...args);
|
64
|
+
}
|
59
65
|
}
|
60
66
|
async send(mail) {
|
67
|
+
this.log('Sending mail:', mail);
|
61
68
|
switch (this.mailConfig.type) {
|
62
69
|
case mail_configuration_type_enum_1.MailConfigurationTypeEnum.AWS:
|
63
70
|
return this.sendWithSES(mail);
|
@@ -129,8 +136,16 @@ let MailService = class MailService {
|
|
129
136
|
if (this.mailConfig.type !== 'SMTP') {
|
130
137
|
throw new Error('Invalid mail configuration type');
|
131
138
|
}
|
132
|
-
const { password: pass, username: user, host, port, secure = false, } = this.mailConfig;
|
139
|
+
const { password: pass, username: user, host, port, secure = false, rejectUnauthorized = true, } = this.mailConfig;
|
133
140
|
const nodemailer = await Promise.resolve().then(() => __importStar(require('nodemailer')));
|
141
|
+
this.log(`Sending mail with SMTP`, {
|
142
|
+
host,
|
143
|
+
port,
|
144
|
+
secure,
|
145
|
+
user,
|
146
|
+
pass,
|
147
|
+
rejectUnauthorized,
|
148
|
+
});
|
134
149
|
const transporter = nodemailer.createTransport({
|
135
150
|
host,
|
136
151
|
port,
|
@@ -139,8 +154,11 @@ let MailService = class MailService {
|
|
139
154
|
user,
|
140
155
|
pass,
|
141
156
|
},
|
157
|
+
tls: {
|
158
|
+
rejectUnauthorized,
|
159
|
+
},
|
142
160
|
});
|
143
|
-
|
161
|
+
const result = await transporter.sendMail({
|
144
162
|
from: mail.from || process.env.SMTP_FROM || process.env.SMTP_USER,
|
145
163
|
to: mail.to,
|
146
164
|
subject: mail.subject,
|
@@ -150,6 +168,8 @@ let MailService = class MailService {
|
|
150
168
|
replyTo: mail.replyTo,
|
151
169
|
priority: mail.priority,
|
152
170
|
});
|
171
|
+
this.log('Email sent:', result);
|
172
|
+
return result;
|
153
173
|
}
|
154
174
|
async sendWithGmail(mail) {
|
155
175
|
if (this.mailConfig.type !== 'GMAIL') {
|
@@ -157,6 +177,12 @@ let MailService = class MailService {
|
|
157
177
|
}
|
158
178
|
const { clientId, clientSecret, from, refreshToken } = this.mailConfig;
|
159
179
|
const redirectURI = 'https://developers.google.com/oauthplayground';
|
180
|
+
this.log(`Sending mail with Gmail`, {
|
181
|
+
clientId,
|
182
|
+
clientSecret,
|
183
|
+
from,
|
184
|
+
refreshToken,
|
185
|
+
});
|
160
186
|
const { auth } = await Promise.resolve().then(() => __importStar(require('googleapis/build/src/apis/oauth2')));
|
161
187
|
const oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectURI);
|
162
188
|
oauth2Client.setCredentials({
|
@@ -173,7 +199,9 @@ let MailService = class MailService {
|
|
173
199
|
'Content-Type': 'application/json',
|
174
200
|
};
|
175
201
|
const response = this.httpService.post(url, requestBody, { headers });
|
176
|
-
|
202
|
+
const result = await (0, rxjs_1.firstValueFrom)(response);
|
203
|
+
this.log('Email sent:', result);
|
204
|
+
return result;
|
177
205
|
}
|
178
206
|
async sendWithSES(mail) {
|
179
207
|
var _a;
|
@@ -181,6 +209,12 @@ let MailService = class MailService {
|
|
181
209
|
throw new Error('Invalid mail configuration type');
|
182
210
|
}
|
183
211
|
const { region, from, accessKeyId, secretAccessKey } = this.mailConfig;
|
212
|
+
this.log(`Sending mail with AWS SES`, {
|
213
|
+
region,
|
214
|
+
from,
|
215
|
+
accessKeyId,
|
216
|
+
secretAccessKey,
|
217
|
+
});
|
184
218
|
const { SES } = await Promise.resolve().then(() => __importStar(require('aws-sdk')));
|
185
219
|
const ses = new SES({
|
186
220
|
apiVersion: '2010-12-01',
|
@@ -278,7 +312,9 @@ let MailService = class MailService {
|
|
278
312
|
ReplyToAddresses: mail.replyTo,
|
279
313
|
Source: from,
|
280
314
|
};
|
281
|
-
|
315
|
+
const result = await ses.sendEmail(params).promise();
|
316
|
+
this.log('Email sent:', result);
|
317
|
+
return result;
|
282
318
|
}
|
283
319
|
}
|
284
320
|
};
|
package/dist/mail.service.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../src/mail.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA4C;AAC5C,2CAAgE;AAChE,yDAA2C;AAC3C,+BAAsC;AACtC,uFAAiF;AAEjF,+CAA0D;AAGnD,IAAM,WAAW,GAAjB,MAAM,WAAW;
|
1
|
+
{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../src/mail.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -3,6 +3,7 @@ import { ModuleMetadata } from '@nestjs/common';
|
|
3
3
|
export type MailModuleOptions =
|
4
4
|
| {
|
5
5
|
global?: boolean;
|
6
|
+
debug?: boolean;
|
6
7
|
type: 'AWS';
|
7
8
|
region: string;
|
8
9
|
accessKeyId: string;
|
@@ -11,15 +12,18 @@ export type MailModuleOptions =
|
|
11
12
|
}
|
12
13
|
| {
|
13
14
|
global?: boolean;
|
15
|
+
debug?: boolean;
|
14
16
|
type: 'SMTP';
|
15
17
|
host: string;
|
16
18
|
port: number;
|
17
19
|
secure?: boolean;
|
18
20
|
username: string;
|
19
21
|
password: string;
|
22
|
+
rejectUnauthorized?: boolean;
|
20
23
|
}
|
21
24
|
| {
|
22
25
|
global?: boolean;
|
26
|
+
debug?: boolean;
|
23
27
|
type: 'GMAIL';
|
24
28
|
clientId: string;
|
25
29
|
clientSecret: string;
|
package/src/mail.service.ts
CHANGED
@@ -8,14 +8,23 @@ import { Mail, MAIL_MODULE_OPTIONS } from './mail.consts';
|
|
8
8
|
|
9
9
|
@Injectable()
|
10
10
|
export class MailService {
|
11
|
+
private debug = false;
|
12
|
+
|
11
13
|
constructor(
|
12
14
|
@Inject(MAIL_MODULE_OPTIONS)
|
13
15
|
private readonly mailConfig: MailModuleOptions,
|
14
16
|
@Inject(forwardRef(() => HttpService))
|
15
17
|
private readonly httpService: HttpService,
|
16
|
-
) {
|
18
|
+
) {}
|
19
|
+
|
20
|
+
private log(...args: any[]) {
|
21
|
+
if (this.debug) {
|
22
|
+
console.log(...args);
|
23
|
+
}
|
24
|
+
}
|
17
25
|
|
18
26
|
async send(mail: Mail) {
|
27
|
+
this.log('Sending mail:', mail);
|
19
28
|
switch (this.mailConfig.type) {
|
20
29
|
case MailConfigurationTypeEnum.AWS:
|
21
30
|
return this.sendWithSES(mail);
|
@@ -81,7 +90,6 @@ export class MailService {
|
|
81
90
|
|
82
91
|
return encodedMessage;
|
83
92
|
} else {
|
84
|
-
|
85
93
|
const encodedSubject = `=?utf-8?B?${Buffer.from(mail.subject).toString('base64')}?=`;
|
86
94
|
|
87
95
|
const messageParts = [
|
@@ -115,10 +123,20 @@ export class MailService {
|
|
115
123
|
host,
|
116
124
|
port,
|
117
125
|
secure = false,
|
126
|
+
rejectUnauthorized = true,
|
118
127
|
} = this.mailConfig;
|
119
128
|
|
120
129
|
const nodemailer = await import('nodemailer');
|
121
130
|
|
131
|
+
this.log(`Sending mail with SMTP`, {
|
132
|
+
host,
|
133
|
+
port,
|
134
|
+
secure,
|
135
|
+
user,
|
136
|
+
pass,
|
137
|
+
rejectUnauthorized,
|
138
|
+
});
|
139
|
+
|
122
140
|
const transporter = nodemailer.createTransport({
|
123
141
|
host,
|
124
142
|
port,
|
@@ -127,9 +145,12 @@ export class MailService {
|
|
127
145
|
user,
|
128
146
|
pass,
|
129
147
|
},
|
148
|
+
tls: {
|
149
|
+
rejectUnauthorized,
|
150
|
+
},
|
130
151
|
});
|
131
152
|
|
132
|
-
|
153
|
+
const result = await transporter.sendMail({
|
133
154
|
from: mail.from || process.env.SMTP_FROM || process.env.SMTP_USER,
|
134
155
|
to: mail.to,
|
135
156
|
subject: mail.subject,
|
@@ -139,6 +160,10 @@ export class MailService {
|
|
139
160
|
replyTo: mail.replyTo,
|
140
161
|
priority: mail.priority,
|
141
162
|
});
|
163
|
+
|
164
|
+
this.log('Email sent:', result);
|
165
|
+
|
166
|
+
return result;
|
142
167
|
}
|
143
168
|
|
144
169
|
async sendWithGmail(mail: Mail) {
|
@@ -148,6 +173,13 @@ export class MailService {
|
|
148
173
|
const { clientId, clientSecret, from, refreshToken } = this.mailConfig;
|
149
174
|
const redirectURI = 'https://developers.google.com/oauthplayground';
|
150
175
|
|
176
|
+
this.log(`Sending mail with Gmail`, {
|
177
|
+
clientId,
|
178
|
+
clientSecret,
|
179
|
+
from,
|
180
|
+
refreshToken,
|
181
|
+
});
|
182
|
+
|
151
183
|
const { auth } = await import('googleapis/build/src/apis/oauth2');
|
152
184
|
|
153
185
|
const oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectURI);
|
@@ -176,7 +208,11 @@ export class MailService {
|
|
176
208
|
|
177
209
|
const response = this.httpService.post(url, requestBody, { headers });
|
178
210
|
|
179
|
-
|
211
|
+
const result = await firstValueFrom(response);
|
212
|
+
|
213
|
+
this.log('Email sent:', result);
|
214
|
+
|
215
|
+
return result;
|
180
216
|
}
|
181
217
|
|
182
218
|
async sendWithSES(mail: Mail) {
|
@@ -185,6 +221,13 @@ export class MailService {
|
|
185
221
|
}
|
186
222
|
const { region, from, accessKeyId, secretAccessKey } = this.mailConfig;
|
187
223
|
|
224
|
+
this.log(`Sending mail with AWS SES`, {
|
225
|
+
region,
|
226
|
+
from,
|
227
|
+
accessKeyId,
|
228
|
+
secretAccessKey,
|
229
|
+
});
|
230
|
+
|
188
231
|
const { SES } = await import('aws-sdk');
|
189
232
|
|
190
233
|
const ses = new SES({
|
@@ -297,7 +340,11 @@ export class MailService {
|
|
297
340
|
Source: from,
|
298
341
|
};
|
299
342
|
|
300
|
-
|
343
|
+
const result = await ses.sendEmail(params).promise();
|
344
|
+
|
345
|
+
this.log('Email sent:', result);
|
346
|
+
|
347
|
+
return result;
|
301
348
|
}
|
302
349
|
}
|
303
350
|
}
|