@builder6/email 0.11.12 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/email/email.controller.d.ts +10 -0
- package/dist/email/email.controller.js +128 -0
- package/dist/email/email.controller.js.map +1 -1
- package/dist/email/email.module.js +2 -1
- package/dist/email/email.module.js.map +1 -1
- package/dist/email/email.moleculer.d.ts +5 -0
- package/dist/email/email.moleculer.js +26 -1
- package/dist/email/email.moleculer.js.map +1 -1
- package/dist/email/email.schedule.d.ts +16 -0
- package/dist/email/email.schedule.js +124 -0
- package/dist/email/email.schedule.js.map +1 -0
- package/dist/email/email.service.d.ts +28 -1
- package/dist/email/email.service.js +89 -2
- package/dist/email/email.service.js.map +1 -1
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -12,10 +12,18 @@ B6_EMAIL_PASSWORD=xxxxx
|
|
|
12
12
|
B6_EMAIL_SECURE=false
|
|
13
13
|
B6_EMAIL_DEBUG=true
|
|
14
14
|
B6_EMAIL_LOGGER=true
|
|
15
|
+
B6_EMAIL_ENABLED=true
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
## 配置定时发送
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
B6_EMAIL_ENABLED 时会启动定时发送任务,从 _mail_queue 集合中读取邮件发送任务,发送成功后删除任务。
|
|
21
|
+
|
|
22
|
+
以下环境变量非必须配置。
|
|
23
|
+
|
|
24
|
+
```shell
|
|
25
|
+
STEEDOS_EMAIL_QUEUE_INTERVAL=3000 # 邮件定时器,单位:毫秒, 默认值:3000
|
|
26
|
+
STEEDOS_EMAIL_QUEUE_BATCH_SIZE=1 # 邮件队列批量发送数量,默认值:1
|
|
27
|
+
STEEDOS_EMAIL_QUEUE_TIMEOUT=60000 # 邮件队列超时时间,单位:毫秒,默认值:60000
|
|
28
|
+
STEEDOS_EMAIL_QUEUE_KEEPS=false # 邮件发送之后是否保留邮件队列,默认值:false
|
|
21
29
|
```
|
|
@@ -12,6 +12,16 @@ export declare class EmailController {
|
|
|
12
12
|
};
|
|
13
13
|
message?: undefined;
|
|
14
14
|
}>;
|
|
15
|
+
sendMailToUsers(spaceId: string, fromUserId: string, toUserIds: string[], ccUserIds: string[], bccUserIds: string[], replyToUserId: string, subject: string, text: string, html: string, headers: object, attachments: object[], mailComposer: object): Promise<{
|
|
16
|
+
message: string;
|
|
17
|
+
error?: undefined;
|
|
18
|
+
} | {
|
|
19
|
+
error: {
|
|
20
|
+
code: number;
|
|
21
|
+
message: any;
|
|
22
|
+
};
|
|
23
|
+
message?: undefined;
|
|
24
|
+
}>;
|
|
15
25
|
updateConfig(config: object): Promise<{
|
|
16
26
|
message: string;
|
|
17
27
|
error?: undefined;
|
|
@@ -36,6 +36,34 @@ let EmailController = class EmailController {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
async sendMailToUsers(spaceId, fromUserId, toUserIds, ccUserIds, bccUserIds, replyToUserId, subject, text, html, headers, attachments, mailComposer) {
|
|
40
|
+
try {
|
|
41
|
+
await this.emailService.sendMailToUsers({
|
|
42
|
+
spaceId,
|
|
43
|
+
fromUserId,
|
|
44
|
+
toUserIds,
|
|
45
|
+
ccUserIds,
|
|
46
|
+
bccUserIds,
|
|
47
|
+
replyToUserId,
|
|
48
|
+
subject,
|
|
49
|
+
text,
|
|
50
|
+
html,
|
|
51
|
+
headers,
|
|
52
|
+
attachments,
|
|
53
|
+
mailComposer
|
|
54
|
+
});
|
|
55
|
+
return { message: '给多人发送邮件发送成功' };
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('Query error', error);
|
|
59
|
+
return {
|
|
60
|
+
error: {
|
|
61
|
+
code: 500,
|
|
62
|
+
message: error.message,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
39
67
|
async updateConfig(config) {
|
|
40
68
|
try {
|
|
41
69
|
await this.emailService.updateConfig(config);
|
|
@@ -101,6 +129,106 @@ __decorate([
|
|
|
101
129
|
__metadata("design:paramtypes", [String, String, String, String, String]),
|
|
102
130
|
__metadata("design:returntype", Promise)
|
|
103
131
|
], EmailController.prototype, "sendEmail", null);
|
|
132
|
+
__decorate([
|
|
133
|
+
(0, common_1.Post)('sendMailToUsers'),
|
|
134
|
+
(0, swagger_1.ApiOperation)({
|
|
135
|
+
summary: '给多人发送邮件',
|
|
136
|
+
description: '通过提供收件人id列表、主题和邮件内容发送邮件',
|
|
137
|
+
}),
|
|
138
|
+
(0, swagger_1.ApiBody)({
|
|
139
|
+
description: '发送邮件所需的参数',
|
|
140
|
+
schema: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
spaceId: {
|
|
144
|
+
type: 'string',
|
|
145
|
+
example: '67505d7484ff2b0b4fc245bb',
|
|
146
|
+
description: 'space id',
|
|
147
|
+
},
|
|
148
|
+
fromUserId: {
|
|
149
|
+
type: 'string',
|
|
150
|
+
example: '67505d5f84ff2b0b4fc245b9',
|
|
151
|
+
description: '发送人的用户id',
|
|
152
|
+
},
|
|
153
|
+
toUserIds: {
|
|
154
|
+
type: 'array',
|
|
155
|
+
items: {
|
|
156
|
+
type: 'string',
|
|
157
|
+
},
|
|
158
|
+
example: ['675b95f987d0d8467f525e91', '6756c5be07e329d0106cdd36'],
|
|
159
|
+
description: '接收邮件的邮箱地址',
|
|
160
|
+
},
|
|
161
|
+
ccUserIds: {
|
|
162
|
+
type: 'array',
|
|
163
|
+
items: {
|
|
164
|
+
type: 'string',
|
|
165
|
+
},
|
|
166
|
+
example: ['675b95f987d0d8467f525e91', '6756c5be07e329d0106cdd36'],
|
|
167
|
+
description: '抄送的用户ids',
|
|
168
|
+
},
|
|
169
|
+
bccUserIds: {
|
|
170
|
+
type: 'array',
|
|
171
|
+
items: {
|
|
172
|
+
type: 'string',
|
|
173
|
+
},
|
|
174
|
+
example: ['675b95f987d0d8467f525e91', '6756c5be07e329d0106cdd36'],
|
|
175
|
+
description: '秘密抄送的用户ids',
|
|
176
|
+
},
|
|
177
|
+
replyToUserId: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
example: '67505d5f84ff2b0b4fc245b9',
|
|
180
|
+
description: '回复某人的邮件id',
|
|
181
|
+
},
|
|
182
|
+
subject: {
|
|
183
|
+
type: 'string',
|
|
184
|
+
example: '邮件标题示例',
|
|
185
|
+
description: '邮件主题',
|
|
186
|
+
},
|
|
187
|
+
text: {
|
|
188
|
+
type: 'string',
|
|
189
|
+
example: '这是一封测试邮件的文本内容',
|
|
190
|
+
description: '邮件的纯文本内容',
|
|
191
|
+
},
|
|
192
|
+
html: {
|
|
193
|
+
type: 'string',
|
|
194
|
+
example: '<h1>这是 HTML 格式的内容</h1>',
|
|
195
|
+
description: '邮件的 HTML 格式内容',
|
|
196
|
+
},
|
|
197
|
+
headers: {
|
|
198
|
+
type: 'object',
|
|
199
|
+
description: '特殊的消息头',
|
|
200
|
+
},
|
|
201
|
+
attachments: {
|
|
202
|
+
type: 'array',
|
|
203
|
+
items: {
|
|
204
|
+
type: 'object'
|
|
205
|
+
},
|
|
206
|
+
description: '附件列表',
|
|
207
|
+
},
|
|
208
|
+
mailComposer: {
|
|
209
|
+
type: 'object',
|
|
210
|
+
description: 'MailComposer对象',
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
required: ['spaceId', 'toUserIds', 'subject'],
|
|
214
|
+
},
|
|
215
|
+
}),
|
|
216
|
+
__param(0, (0, common_1.Body)('spaceId')),
|
|
217
|
+
__param(1, (0, common_1.Body)('fromUserId')),
|
|
218
|
+
__param(2, (0, common_1.Body)('toUserIds')),
|
|
219
|
+
__param(3, (0, common_1.Body)('ccUserIds')),
|
|
220
|
+
__param(4, (0, common_1.Body)('bccUserIds')),
|
|
221
|
+
__param(5, (0, common_1.Body)('replyToUserId')),
|
|
222
|
+
__param(6, (0, common_1.Body)('subject')),
|
|
223
|
+
__param(7, (0, common_1.Body)('text')),
|
|
224
|
+
__param(8, (0, common_1.Body)('html')),
|
|
225
|
+
__param(9, (0, common_1.Body)('headers')),
|
|
226
|
+
__param(10, (0, common_1.Body)('attachments')),
|
|
227
|
+
__param(11, (0, common_1.Body)('mailComposer')),
|
|
228
|
+
__metadata("design:type", Function),
|
|
229
|
+
__metadata("design:paramtypes", [String, String, Array, Array, Array, String, String, String, String, Object, Array, Object]),
|
|
230
|
+
__metadata("design:returntype", Promise)
|
|
231
|
+
], EmailController.prototype, "sendMailToUsers", null);
|
|
104
232
|
__decorate([
|
|
105
233
|
(0, common_1.Patch)('config'),
|
|
106
234
|
(0, swagger_1.ApiOperation)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.controller.js","sourceRoot":"","sources":["../../src/email/email.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA0E;AAC1E,6CAAwD;AACxD,yCAA4C;AAC5C,mDAA+C;AAIxC,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAyCrD,AAAN,KAAK,CAAC,SAAS,CACC,IAAY,EACd,EAAU,EACL,OAAe,EAClB,IAAY,EACZ,IAAY;QAE1B,IAAI;YACF,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;SAC9B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACpC,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;SACH;IACH,CAAC;IAYK,AAAN,KAAK,CAAC,YAAY,CAAS,MAAc;QACvC,IAAI;YACF,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC1B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACpC,OAAO;gBACL,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;SACH;IACH,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"email.controller.js","sourceRoot":"","sources":["../../src/email/email.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,12 +12,13 @@ const core_1 = require("@builder6/core");
|
|
|
12
12
|
const email_service_1 = require("./email.service");
|
|
13
13
|
const email_controller_1 = require("./email.controller");
|
|
14
14
|
const email_moleculer_1 = require("./email.moleculer");
|
|
15
|
+
const email_schedule_1 = require("./email.schedule");
|
|
15
16
|
let EmailModule = class EmailModule {
|
|
16
17
|
};
|
|
17
18
|
EmailModule = __decorate([
|
|
18
19
|
(0, common_1.Module)({
|
|
19
20
|
imports: [core_1.AuthModule, core_1.MongodbModule],
|
|
20
|
-
providers: [email_service_1.EmailService, email_moleculer_1.EmailMoleculer],
|
|
21
|
+
providers: [email_service_1.EmailService, email_moleculer_1.EmailMoleculer, email_schedule_1.EmailScheduleService],
|
|
21
22
|
controllers: [email_controller_1.EmailController],
|
|
22
23
|
exports: [email_service_1.EmailService],
|
|
23
24
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.module.js","sourceRoot":"","sources":["../../src/email/email.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yCAA2D;AAC3D,mDAA+C;AAC/C,yDAAqD;AACrD,uDAAmD;
|
|
1
|
+
{"version":3,"file":"email.module.js","sourceRoot":"","sources":["../../src/email/email.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yCAA2D;AAC3D,mDAA+C;AAC/C,yDAAqD;AACrD,uDAAmD;AACnD,qDAAwD;AAQjD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IANvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,oBAAa,CAAC;QACpC,SAAS,EAAE,CAAC,4BAAY,EAAE,gCAAc,EAAE,qCAAoB,CAAC;QAC/D,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"}
|
|
@@ -17,6 +17,7 @@ const moleculer_1 = require("moleculer");
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const moleculer_2 = require("@builder6/moleculer");
|
|
19
19
|
const email_service_1 = require("./email.service");
|
|
20
|
+
const lodash_1 = require("lodash");
|
|
20
21
|
let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
|
|
21
22
|
constructor(emailService, broker) {
|
|
22
23
|
super(broker);
|
|
@@ -26,6 +27,7 @@ let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
|
|
|
26
27
|
settings: {},
|
|
27
28
|
actions: {
|
|
28
29
|
send: this.send,
|
|
30
|
+
sendMailToUsers: this.sendMailToUsers,
|
|
29
31
|
},
|
|
30
32
|
created: this.serviceCreated,
|
|
31
33
|
started: this.serviceStarted,
|
|
@@ -36,7 +38,8 @@ let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
|
|
|
36
38
|
async serviceStarted() { }
|
|
37
39
|
async serviceStopped() { }
|
|
38
40
|
async send(ctx) {
|
|
39
|
-
|
|
41
|
+
let { from, to, toUsers, subject, text, html } = ctx.params;
|
|
42
|
+
to = (0, lodash_1.isArray)(toUsers) && toUsers.length > 0 ? toUsers.join(',') : to;
|
|
40
43
|
try {
|
|
41
44
|
const result = await this.emailService.sendMail({
|
|
42
45
|
from,
|
|
@@ -77,6 +80,28 @@ let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
|
|
|
77
80
|
};
|
|
78
81
|
}
|
|
79
82
|
}
|
|
83
|
+
async sendMailToUsers(ctx) {
|
|
84
|
+
const { spaceId, toUserIds, subject } = ctx.params;
|
|
85
|
+
if (!spaceId || !(0, lodash_1.isArray)(toUserIds) || !subject) {
|
|
86
|
+
console.error(`参数错误:spaceId=${spaceId}, toUserIds=${(toUserIds ?? []).join(',')}, subject=${subject?.substring(0, 10)}`);
|
|
87
|
+
return {
|
|
88
|
+
error: {
|
|
89
|
+
message: '参数错误',
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
return this.emailService.sendMailToUsers(ctx.params);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(error);
|
|
98
|
+
return {
|
|
99
|
+
error: {
|
|
100
|
+
message: error.message,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
80
105
|
};
|
|
81
106
|
EmailMoleculer = __decorate([
|
|
82
107
|
(0, common_1.Injectable)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.moleculer.js","sourceRoot":"","sources":["../../src/email/email.moleculer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA4D;AAC5D,2CAA4C;AAC5C,mDAAmD;AACnD,mDAA+C;
|
|
1
|
+
{"version":3,"file":"email.moleculer.js","sourceRoot":"","sources":["../../src/email/email.moleculer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { MongodbService } from '@builder6/core';
|
|
3
|
+
import { EmailService } from './email.service';
|
|
4
|
+
export declare class EmailScheduleService {
|
|
5
|
+
private configService;
|
|
6
|
+
private mongodbService;
|
|
7
|
+
private readonly emailService;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private isSendingMail;
|
|
10
|
+
private static interval;
|
|
11
|
+
private batchSize;
|
|
12
|
+
private timeout;
|
|
13
|
+
private keepMails;
|
|
14
|
+
constructor(configService: ConfigService, mongodbService: MongodbService, emailService: EmailService);
|
|
15
|
+
sendEmail(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var EmailScheduleService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.EmailScheduleService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
16
|
+
const common_2 = require("@nestjs/common");
|
|
17
|
+
const config_1 = require("@nestjs/config");
|
|
18
|
+
const core_1 = require("@builder6/core");
|
|
19
|
+
const email_service_1 = require("./email.service");
|
|
20
|
+
const MyPromise = require("bluebird");
|
|
21
|
+
const lodash_1 = require("lodash");
|
|
22
|
+
let EmailScheduleService = EmailScheduleService_1 = class EmailScheduleService {
|
|
23
|
+
constructor(configService, mongodbService, emailService) {
|
|
24
|
+
this.configService = configService;
|
|
25
|
+
this.mongodbService = mongodbService;
|
|
26
|
+
this.emailService = emailService;
|
|
27
|
+
this.logger = new common_2.Logger(EmailScheduleService_1.name);
|
|
28
|
+
this.batchSize = Number(this.configService.get('email.queue.batch.size') || 1);
|
|
29
|
+
this.timeout = Number(this.configService.get('email.queue.timeout') || 60000);
|
|
30
|
+
this.keepMails = this.configService.get('email.queue.keeps');
|
|
31
|
+
}
|
|
32
|
+
async sendEmail() {
|
|
33
|
+
this.logger.log(`Called SendEmail ${new Date()}`);
|
|
34
|
+
if (this.isSendingMail)
|
|
35
|
+
return;
|
|
36
|
+
this.isSendingMail = true;
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
try {
|
|
39
|
+
const pendingMails = await this.mongodbService.find('_mail_queue', {
|
|
40
|
+
sent: false,
|
|
41
|
+
sending: {
|
|
42
|
+
$lt: now,
|
|
43
|
+
},
|
|
44
|
+
errMsg: {
|
|
45
|
+
$exists: false,
|
|
46
|
+
},
|
|
47
|
+
}, {
|
|
48
|
+
sort: {
|
|
49
|
+
createdAt: 1,
|
|
50
|
+
},
|
|
51
|
+
limit: this.batchSize,
|
|
52
|
+
});
|
|
53
|
+
if (pendingMails.length > 0) {
|
|
54
|
+
const mailqueueCol = await this.mongodbService.getCollection('_mail_queue');
|
|
55
|
+
await MyPromise.map(pendingMails, async (pendingMail) => {
|
|
56
|
+
const timeoutAt = now + this.timeout;
|
|
57
|
+
var reserved = await mailqueueCol.updateOne({
|
|
58
|
+
_id: pendingMail._id,
|
|
59
|
+
sent: false,
|
|
60
|
+
sending: {
|
|
61
|
+
$lt: now,
|
|
62
|
+
},
|
|
63
|
+
}, {
|
|
64
|
+
$set: {
|
|
65
|
+
sending: timeoutAt,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
if (!(0, lodash_1.isEmpty)(reserved)) {
|
|
69
|
+
try {
|
|
70
|
+
await this.emailService.sendMail(pendingMail.mail);
|
|
71
|
+
if (this.keepMails) {
|
|
72
|
+
await mailqueueCol.updateOne({
|
|
73
|
+
_id: pendingMail._id,
|
|
74
|
+
}, {
|
|
75
|
+
$set: {
|
|
76
|
+
sent: true,
|
|
77
|
+
sentAt: new Date(),
|
|
78
|
+
sending: 0
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
await mailqueueCol.deleteOne({
|
|
84
|
+
_id: pendingMail._id,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.logger.error(error);
|
|
90
|
+
await mailqueueCol.updateOne({
|
|
91
|
+
_id: pendingMail._id,
|
|
92
|
+
}, {
|
|
93
|
+
$set: {
|
|
94
|
+
errMsg: error.message || error.toString(),
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}, { concurrency: pendingMails.length });
|
|
100
|
+
}
|
|
101
|
+
this.isSendingMail = false;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
this.isSendingMail = false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
EmailScheduleService.interval = Number(process.env.STEEDOS_EMAIL_QUEUE_INTERVAL || 3000);
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, schedule_1.Interval)(EmailScheduleService_1.interval),
|
|
113
|
+
__metadata("design:type", Function),
|
|
114
|
+
__metadata("design:paramtypes", []),
|
|
115
|
+
__metadata("design:returntype", Promise)
|
|
116
|
+
], EmailScheduleService.prototype, "sendEmail", null);
|
|
117
|
+
EmailScheduleService = EmailScheduleService_1 = __decorate([
|
|
118
|
+
(0, common_1.Injectable)(),
|
|
119
|
+
__metadata("design:paramtypes", [config_1.ConfigService,
|
|
120
|
+
core_1.MongodbService,
|
|
121
|
+
email_service_1.EmailService])
|
|
122
|
+
], EmailScheduleService);
|
|
123
|
+
exports.EmailScheduleService = EmailScheduleService;
|
|
124
|
+
//# sourceMappingURL=email.schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.schedule.js","sourceRoot":"","sources":["../../src/email/email.schedule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MongodbService } from '@builder6/core';
|
|
2
2
|
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
import * as nodemailer from 'nodemailer';
|
|
3
4
|
export declare class EmailService {
|
|
4
5
|
private configService;
|
|
5
6
|
private mongodbService;
|
|
@@ -7,12 +8,32 @@ export declare class EmailService {
|
|
|
7
8
|
private emailConfig;
|
|
8
9
|
private readonly logger;
|
|
9
10
|
constructor(configService: ConfigService, mongodbService: MongodbService);
|
|
10
|
-
sendMail({ from, to, subject, text, html, }: {
|
|
11
|
+
sendMail({ from, to, cc, bcc, replyTo, subject, text, html, headers, attachments, mailComposer, }: {
|
|
11
12
|
from?: string;
|
|
12
13
|
to: string;
|
|
14
|
+
cc?: string;
|
|
15
|
+
bcc?: string;
|
|
16
|
+
replyTo?: string;
|
|
13
17
|
subject: string;
|
|
14
18
|
text?: string;
|
|
15
19
|
html?: string;
|
|
20
|
+
headers?: object;
|
|
21
|
+
attachments?: nodemailer.Attachment[];
|
|
22
|
+
mailComposer?: nodemailer.MailComposer;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
sendMailToUsers({ spaceId, fromUserId, toUserIds, ccUserIds, bccUserIds, replyToUserId, subject, text, html, headers, attachments, mailComposer, }: {
|
|
25
|
+
spaceId: string;
|
|
26
|
+
fromUserId: string;
|
|
27
|
+
toUserIds: string[];
|
|
28
|
+
ccUserIds?: string[];
|
|
29
|
+
bccUserIds?: string[];
|
|
30
|
+
replyToUserId?: string;
|
|
31
|
+
subject: string;
|
|
32
|
+
text?: string;
|
|
33
|
+
html?: string;
|
|
34
|
+
headers?: object;
|
|
35
|
+
attachments?: nodemailer.Attachment[];
|
|
36
|
+
mailComposer?: nodemailer.MailComposer;
|
|
16
37
|
}): Promise<void>;
|
|
17
38
|
sendMailToUser({ fromUserId, toUserId, subject, text, html, }: {
|
|
18
39
|
fromUserId?: string;
|
|
@@ -22,5 +43,11 @@ export declare class EmailService {
|
|
|
22
43
|
html?: string;
|
|
23
44
|
}): Promise<void>;
|
|
24
45
|
getUserEmail(userId: string): Promise<any>;
|
|
46
|
+
getUsersEmail(userIds: string[], spaceId: string): Promise<any>;
|
|
47
|
+
convertUserIdsToEmails(userIds: string[], allUsers: {
|
|
48
|
+
_id: string;
|
|
49
|
+
email: string;
|
|
50
|
+
name: string;
|
|
51
|
+
}[]): string;
|
|
25
52
|
updateConfig(config: object): Promise<void>;
|
|
26
53
|
}
|
|
@@ -14,6 +14,7 @@ exports.EmailService = void 0;
|
|
|
14
14
|
const core_1 = require("@builder6/core");
|
|
15
15
|
const common_1 = require("@nestjs/common");
|
|
16
16
|
const config_1 = require("@nestjs/config");
|
|
17
|
+
const lodash_1 = require("lodash");
|
|
17
18
|
const nodemailer = require("nodemailer");
|
|
18
19
|
let EmailService = EmailService_1 = class EmailService {
|
|
19
20
|
constructor(configService, mongodbService) {
|
|
@@ -40,16 +41,22 @@ let EmailService = EmailService_1 = class EmailService {
|
|
|
40
41
|
this.transporter = nodemailer.createTransport(this.emailConfig);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
async sendMail({ from = this.configService.get('email.from'), to, subject, text, html, }) {
|
|
44
|
+
async sendMail({ from = this.configService.get('email.from'), to, cc, bcc, replyTo, subject, text, html, headers, attachments, mailComposer, }) {
|
|
44
45
|
if (!this.transporter) {
|
|
45
46
|
throw new Error('Email service not enabled');
|
|
46
47
|
}
|
|
47
48
|
const mailOptions = {
|
|
48
|
-
from
|
|
49
|
+
from,
|
|
49
50
|
to,
|
|
51
|
+
cc,
|
|
52
|
+
bcc,
|
|
53
|
+
replyTo,
|
|
50
54
|
subject,
|
|
51
55
|
text,
|
|
52
56
|
html,
|
|
57
|
+
headers,
|
|
58
|
+
attachments,
|
|
59
|
+
mailComposer,
|
|
53
60
|
};
|
|
54
61
|
try {
|
|
55
62
|
const info = await this.transporter.sendMail(mailOptions);
|
|
@@ -61,6 +68,44 @@ let EmailService = EmailService_1 = class EmailService {
|
|
|
61
68
|
throw error;
|
|
62
69
|
}
|
|
63
70
|
}
|
|
71
|
+
async sendMailToUsers({ spaceId, fromUserId, toUserIds, ccUserIds, bccUserIds, replyToUserId, subject, text, html, headers, attachments, mailComposer, }) {
|
|
72
|
+
const allUsers = await this.getUsersEmail((0, lodash_1.compact)([
|
|
73
|
+
fromUserId,
|
|
74
|
+
replyToUserId,
|
|
75
|
+
...toUserIds,
|
|
76
|
+
...(ccUserIds ?? []),
|
|
77
|
+
...(bccUserIds ?? []),
|
|
78
|
+
]), spaceId);
|
|
79
|
+
const from = this.convertUserIdsToEmails([fromUserId], allUsers) ||
|
|
80
|
+
this.configService.get('email.from');
|
|
81
|
+
let to = this.convertUserIdsToEmails(toUserIds, allUsers);
|
|
82
|
+
const cc = this.convertUserIdsToEmails(ccUserIds ?? [], allUsers);
|
|
83
|
+
const bcc = this.convertUserIdsToEmails(bccUserIds ?? [], allUsers);
|
|
84
|
+
if ((0, lodash_1.isEmpty)(to) && (0, lodash_1.isEmpty)(cc) && (0, lodash_1.isEmpty)(bcc)) {
|
|
85
|
+
throw new Error('没有满足要求的接收者');
|
|
86
|
+
}
|
|
87
|
+
to = (0, lodash_1.isEmpty)(to) ? '华炎魔方 <noreply@xxx.com>' : to;
|
|
88
|
+
const replyTo = this.convertUserIdsToEmails([replyToUserId], allUsers);
|
|
89
|
+
await this.mongodbService.insertOne('_mail_queue', {
|
|
90
|
+
createdAt: new Date().toISOString(),
|
|
91
|
+
createdBy: fromUserId ?? '<SERVER>',
|
|
92
|
+
mail: {
|
|
93
|
+
from,
|
|
94
|
+
to,
|
|
95
|
+
cc,
|
|
96
|
+
bcc,
|
|
97
|
+
replyTo,
|
|
98
|
+
subject,
|
|
99
|
+
text,
|
|
100
|
+
html,
|
|
101
|
+
headers,
|
|
102
|
+
attachments,
|
|
103
|
+
mailComposer,
|
|
104
|
+
},
|
|
105
|
+
sent: false,
|
|
106
|
+
sending: 0,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
64
109
|
async sendMailToUser({ fromUserId, toUserId, subject, text, html, }) {
|
|
65
110
|
const from = (fromUserId && (await this.getUserEmail(fromUserId))) ||
|
|
66
111
|
this.configService.get('email.from');
|
|
@@ -89,6 +134,48 @@ let EmailService = EmailService_1 = class EmailService {
|
|
|
89
134
|
return null;
|
|
90
135
|
}
|
|
91
136
|
}
|
|
137
|
+
async getUsersEmail(userIds, spaceId) {
|
|
138
|
+
const [users, spaceUsers] = await Promise.all([
|
|
139
|
+
this.mongodbService.find('users', {
|
|
140
|
+
_id: { $in: userIds },
|
|
141
|
+
email: { $exists: true },
|
|
142
|
+
}, {
|
|
143
|
+
projection: {
|
|
144
|
+
_id: 1,
|
|
145
|
+
name: 1,
|
|
146
|
+
email: 1,
|
|
147
|
+
},
|
|
148
|
+
}),
|
|
149
|
+
this.mongodbService.find('space_users', {
|
|
150
|
+
space: spaceId,
|
|
151
|
+
user: { $in: userIds },
|
|
152
|
+
email_notification: true,
|
|
153
|
+
}, {
|
|
154
|
+
projection: {
|
|
155
|
+
user: 1,
|
|
156
|
+
},
|
|
157
|
+
}),
|
|
158
|
+
]);
|
|
159
|
+
const spaceUsersIds = spaceUsers.map((spaceUser) => spaceUser.user);
|
|
160
|
+
return (users ?? []).filter((user) => spaceUsersIds.includes(user._id));
|
|
161
|
+
}
|
|
162
|
+
convertUserIdsToEmails(userIds, allUsers) {
|
|
163
|
+
if ((0, lodash_1.isEmpty)(userIds) || (0, lodash_1.isEmpty)(allUsers)) {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
return (0, lodash_1.compact)(userIds.map((userId) => {
|
|
167
|
+
const currUser = allUsers.find((user) => user._id === userId);
|
|
168
|
+
if (currUser && currUser.name) {
|
|
169
|
+
return `"${currUser.name}" <${currUser.email}>`;
|
|
170
|
+
}
|
|
171
|
+
else if (currUser) {
|
|
172
|
+
return currUser.email;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
})).join(', ');
|
|
178
|
+
}
|
|
92
179
|
async updateConfig(config) {
|
|
93
180
|
const emailConfig = {
|
|
94
181
|
...this.emailConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/email/email.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAgD;AAChD,2CAAoD;AACpD,2CAA+C;AAC/C,yCAAyC;AAGlC,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAKvB,YACU,aAA4B,EAC5B,cAA8B;QAD9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QANhC,gBAAW,GAA2B,IAAI,CAAC;QAC3C,gBAAW,GAAW,EAAE,CAAC;QAChB,WAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;QAMtD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;YAC3C,IAAI,CAAC,WAAW,GAAG;gBACjB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC9C,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;oBAC9C,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;iBAC/C;gBACD,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC9C,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;gBAC5C,GAAG,EAAE;oBACH,kBAAkB,EAAE,KAAK;iBAC1B;aACF,CAAC;YACF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACjE;IACH,CAAC;IASD,KAAK,CAAC,QAAQ,CAAC,EACb,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3C,EAAE,EACF,OAAO,EACP,IAAI,EACJ,IAAI,
|
|
1
|
+
{"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/email/email.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builder6/email",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -12,11 +12,16 @@
|
|
|
12
12
|
"build:watch": "rimraf dist && tsc --watch"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@builder6/core": "^0.
|
|
15
|
+
"@builder6/core": "^0.12.0",
|
|
16
|
+
"bluebird": "^3.7.2",
|
|
17
|
+
"lodash": "^4.17.5",
|
|
16
18
|
"nodemailer": "^6.9.16"
|
|
17
19
|
},
|
|
18
20
|
"publishConfig": {
|
|
19
21
|
"access": "public"
|
|
20
22
|
},
|
|
21
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "36d1112d78ee668de5dc61c6b2cb7eceff6d123d",
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/bluebird": "^3.5.42"
|
|
26
|
+
}
|
|
22
27
|
}
|