@builder6/email 0.11.12 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md 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
- STEEDOS_CRON_MAILQUEUE_INTERVAL=3000 # 邮件定时器,单位:毫秒
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;
@@ -23,7 +23,7 @@ let EmailController = class EmailController {
23
23
  }
24
24
  async sendEmail(from, to, subject, text, html) {
25
25
  try {
26
- await this.emailService.sendMail({ from, to, subject, text, html });
26
+ await this.emailService.addEmailToQueue({ from, to, subject, text, html });
27
27
  return { message: '邮件发送成功' };
28
28
  }
29
29
  catch (error) {
@@ -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":"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"}
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;AAQ5C,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,CAAC;QACzC,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"}
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"}
@@ -16,4 +16,9 @@ export declare class EmailMoleculer extends Service {
16
16
  message: any;
17
17
  };
18
18
  }>;
19
+ sendMailToUsers(ctx: Context): Promise<void | {
20
+ error: {
21
+ message: any;
22
+ };
23
+ }>;
19
24
  }
@@ -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,15 +38,18 @@ let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
36
38
  async serviceStarted() { }
37
39
  async serviceStopped() { }
38
40
  async send(ctx) {
39
- const { from, to, subject, text, html } = ctx.params;
41
+ let { to, subject } = ctx.params;
42
+ to = (0, lodash_1.isArray)(to) && to.length > 0 ? to.join(',') : to;
43
+ if (!(0, lodash_1.isEmpty)(to) || !subject) {
44
+ console.error(`参数错误:to=${to}, subject=${subject?.substring(0, 10)}`);
45
+ return {
46
+ error: {
47
+ message: '参数错误',
48
+ },
49
+ };
50
+ }
40
51
  try {
41
- const result = await this.emailService.sendMail({
42
- from,
43
- to,
44
- subject,
45
- text,
46
- html,
47
- });
52
+ const result = await this.emailService.addEmailToQueue(ctx.params);
48
53
  return result;
49
54
  }
50
55
  catch (error) {
@@ -77,6 +82,28 @@ let EmailMoleculer = class EmailMoleculer extends moleculer_1.Service {
77
82
  };
78
83
  }
79
84
  }
85
+ async sendMailToUsers(ctx) {
86
+ const { spaceId, toUserIds, subject } = ctx.params;
87
+ if (!spaceId || !(0, lodash_1.isArray)(toUserIds) || !subject) {
88
+ console.error(`参数错误:spaceId=${spaceId}, toUserIds=${(toUserIds ?? []).join(',')}, subject=${subject?.substring(0, 10)}`);
89
+ return {
90
+ error: {
91
+ message: '参数错误',
92
+ },
93
+ };
94
+ }
95
+ try {
96
+ return this.emailService.sendMailToUsers(ctx.params);
97
+ }
98
+ catch (error) {
99
+ console.error(error);
100
+ return {
101
+ error: {
102
+ message: error.message,
103
+ },
104
+ };
105
+ }
106
+ }
80
107
  };
81
108
  EmailMoleculer = __decorate([
82
109
  (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;AAGxC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,mBAAO;IACzC,YACmB,YAA0B,EAC3B,MAAqB;QAErC,KAAK,CAAC,MAAM,CAAC,CAAC;QAHG,iBAAY,GAAZ,YAAY,CAAc;QAK3C,IAAI,CAAC,kBAAkB,CAAC;YACtB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACD,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,OAAO,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,cAAc,KAAI,CAAC;IAEnB,KAAK,CAAC,cAAc,KAAI,CAAC;IAEzB,KAAK,CAAC,cAAc,KAAI,CAAC;IAEzB,KAAK,CAAC,IAAI,CAAC,GAAY;QACrB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAa,CAAC;QAC5D,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC9C,IAAI;gBACJ,EAAE;gBACF,OAAO;gBACP,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;gBACL,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAY;QAC3B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAa,CAAC;QACxE,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;gBACpD,UAAU;gBACV,QAAQ;gBACR,OAAO;gBACP,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;gBACL,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;SACH;IACH,CAAC;CACF,CAAA;AAlEY,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,wBAAY,GAAE,CAAA;qCADgB,4BAAY;QACnB,yBAAa;GAH5B,cAAc,CAkE1B;AAlEY,wCAAc"}
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,126 @@
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
+ if (this.configService.get('email.enabled')) {
34
+ this.logger.debug(`Called SendEmail ${new Date()}`);
35
+ if (this.isSendingMail)
36
+ return;
37
+ this.isSendingMail = true;
38
+ const now = Date.now();
39
+ try {
40
+ const pendingMails = await this.mongodbService.find('_mail_queue', {
41
+ sent: false,
42
+ sending: {
43
+ $lt: now,
44
+ },
45
+ errMsg: {
46
+ $exists: false,
47
+ },
48
+ }, {
49
+ sort: {
50
+ createdAt: 1,
51
+ },
52
+ limit: this.batchSize,
53
+ });
54
+ if (pendingMails.length > 0) {
55
+ const mailqueueCol = await this.mongodbService.getCollection('_mail_queue');
56
+ await MyPromise.map(pendingMails, async (pendingMail) => {
57
+ const timeoutAt = now + this.timeout;
58
+ var reserved = await mailqueueCol.updateOne({
59
+ _id: pendingMail._id,
60
+ sent: false,
61
+ sending: {
62
+ $lt: now,
63
+ },
64
+ }, {
65
+ $set: {
66
+ sending: timeoutAt,
67
+ },
68
+ });
69
+ if (!(0, lodash_1.isEmpty)(reserved)) {
70
+ try {
71
+ await this.emailService.sendMail(pendingMail.mail);
72
+ if (this.keepMails) {
73
+ await mailqueueCol.updateOne({
74
+ _id: pendingMail._id,
75
+ }, {
76
+ $set: {
77
+ sent: true,
78
+ sentAt: new Date(),
79
+ sending: 0
80
+ },
81
+ });
82
+ }
83
+ else {
84
+ await mailqueueCol.deleteOne({
85
+ _id: pendingMail._id,
86
+ });
87
+ }
88
+ }
89
+ catch (error) {
90
+ this.logger.error(error);
91
+ await mailqueueCol.updateOne({
92
+ _id: pendingMail._id,
93
+ }, {
94
+ $set: {
95
+ errMsg: error.message || error.toString(),
96
+ },
97
+ });
98
+ }
99
+ }
100
+ }, { concurrency: pendingMails.length });
101
+ }
102
+ }
103
+ catch (error) {
104
+ this.logger.error(error);
105
+ }
106
+ finally {
107
+ this.isSendingMail = false;
108
+ }
109
+ }
110
+ }
111
+ };
112
+ EmailScheduleService.interval = Number(process.env.STEEDOS_EMAIL_QUEUE_INTERVAL || 3000);
113
+ __decorate([
114
+ (0, schedule_1.Interval)(EmailScheduleService_1.interval),
115
+ __metadata("design:type", Function),
116
+ __metadata("design:paramtypes", []),
117
+ __metadata("design:returntype", Promise)
118
+ ], EmailScheduleService.prototype, "sendEmail", null);
119
+ EmailScheduleService = EmailScheduleService_1 = __decorate([
120
+ (0, common_1.Injectable)(),
121
+ __metadata("design:paramtypes", [config_1.ConfigService,
122
+ core_1.MongodbService,
123
+ email_service_1.EmailService])
124
+ ], EmailScheduleService);
125
+ exports.EmailScheduleService = EmailScheduleService;
126
+ //# sourceMappingURL=email.schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.schedule.js","sourceRoot":"","sources":["../../src/email/email.schedule.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA4C;AAC5C,2CAAwC;AACxC,2CAA+C;AAC/C,yCAAgD;AAChD,mDAA+C;AAC/C,sCAAsC;AACtC,mCAAiC;AAI1B,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAU/B,YACU,aAA4B,EAC5B,cAA8B,EACrB,YAA0B;QAFnC,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QACrB,iBAAY,GAAZ,YAAY,CAAc;QAZ5B,WAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;QAc9D,IAAI,CAAC,SAAS,GAAG,MAAM,CACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CACtD,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9D,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI;gBACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CACjD,aAAa,EACb;oBACE,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE;wBACP,GAAG,EAAE,GAAG;qBACT;oBACD,MAAM,EAAE;wBACN,OAAO,EAAE,KAAK;qBACf;iBACF,EACD;oBACE,IAAI,EAAE;wBACJ,SAAS,EAAE,CAAC;qBACb;oBACD,KAAK,EAAE,IAAI,CAAC,SAAS;iBACtB,CACF,CAAC;gBACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC3B,MAAM,YAAY,GAChB,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;oBACzD,MAAM,SAAS,CAAC,GAAG,CACjB,YAAY,EACZ,KAAK,EAAE,WAmBN,EAAE,EAAE;wBACH,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;wBACrC,IAAI,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,CACzC;4BACE,GAAG,EAAE,WAAW,CAAC,GAAG;4BACpB,IAAI,EAAE,KAAK;4BACX,OAAO,EAAE;gCACP,GAAG,EAAE,GAAG;6BACT;yBACF,EACD;4BACE,IAAI,EAAE;gCACJ,OAAO,EAAE,SAAS;6BACnB;yBACF,CACF,CAAC;wBACF,IAAI,CAAC,IAAA,gBAAO,EAAC,QAAQ,CAAC,EAAE;4BACtB,IAAI;gCACF,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gCACnD,IAAI,IAAI,CAAC,SAAS,EAAE;oCAClB,MAAM,YAAY,CAAC,SAAS,CAC1B;wCACE,GAAG,EAAE,WAAW,CAAC,GAAG;qCACrB,EACD;wCACE,IAAI,EAAE;4CACJ,IAAI,EAAE,IAAI;4CACV,MAAM,EAAE,IAAI,IAAI,EAAE;4CAClB,OAAO,EAAE,CAAC;yCACX;qCACF,CACF,CAAC;iCACH;qCAAM;oCACL,MAAM,YAAY,CAAC,SAAS,CAAC;wCAC3B,GAAG,EAAE,WAAW,CAAC,GAAG;qCACrB,CAAC,CAAC;iCACJ;6BACF;4BAAC,OAAO,KAAK,EAAE;gCACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gCACzB,MAAM,YAAY,CAAC,SAAS,CAC1B;oCACE,GAAG,EAAE,WAAW,CAAC,GAAG;iCACrB,EACD;oCACE,IAAI,EAAE;wCACJ,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;qCAC1C;iCACF,CACF,CAAC;6BACH;yBACF;oBACH,CAAC,EACD,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,CACrC,CAAC;iBACH;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC1B;oBAAS;gBACR,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;aAC5B;SACF;IACH,CAAC;;AAlIc,6BAAQ,GAAG,MAAM,CAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,IAAI,CACjD,CAAC;AAkBI;IADL,IAAA,mBAAQ,EAAC,sBAAoB,CAAC,QAAQ,CAAC;;;;qDA+GvC;AArIU,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAYc,sBAAa;QACZ,qBAAc;QACP,4BAAY;GAblC,oBAAoB,CAsIhC;AAtIY,oDAAoB"}
@@ -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,45 @@ 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
+ addEmailToQueue({ from, to, cc, bcc, replyTo, subject, text, html, headers, attachments, mailComposer, }: {
25
+ from?: string;
26
+ to: string;
27
+ cc?: string;
28
+ bcc?: string;
29
+ replyTo?: string;
30
+ subject: string;
31
+ text?: string;
32
+ html?: string;
33
+ headers?: object;
34
+ attachments?: nodemailer.Attachment[];
35
+ mailComposer?: nodemailer.MailComposer;
36
+ }): Promise<void>;
37
+ sendMailToUsers({ spaceId, fromUserId, toUserIds, ccUserIds, bccUserIds, replyToUserId, subject, text, html, headers, attachments, mailComposer, }: {
38
+ spaceId: string;
39
+ fromUserId: string;
40
+ toUserIds: string[];
41
+ ccUserIds?: string[];
42
+ bccUserIds?: string[];
43
+ replyToUserId?: string;
44
+ subject: string;
45
+ text?: string;
46
+ html?: string;
47
+ headers?: object;
48
+ attachments?: nodemailer.Attachment[];
49
+ mailComposer?: nodemailer.MailComposer;
16
50
  }): Promise<void>;
17
51
  sendMailToUser({ fromUserId, toUserId, subject, text, html, }: {
18
52
  fromUserId?: string;
@@ -22,5 +56,11 @@ export declare class EmailService {
22
56
  html?: string;
23
57
  }): Promise<void>;
24
58
  getUserEmail(userId: string): Promise<any>;
59
+ getUsersEmail(userIds: string[], spaceId: string): Promise<any>;
60
+ convertUserIdsToEmails(userIds: string[], allUsers: {
61
+ _id: string;
62
+ email: string;
63
+ name: string;
64
+ }[]): string;
25
65
  updateConfig(config: object): Promise<void>;
26
66
  }
@@ -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: 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,65 @@ let EmailService = EmailService_1 = class EmailService {
61
68
  throw error;
62
69
  }
63
70
  }
71
+ async addEmailToQueue({ from = this.configService.get('email.from'), to, cc, bcc, replyTo, subject, text, html, headers, attachments, mailComposer, }) {
72
+ await this.mongodbService.insertOne('_mail_queue', {
73
+ createdAt: new Date().toISOString(),
74
+ createdBy: '<SERVER>',
75
+ mail: {
76
+ from,
77
+ to,
78
+ cc,
79
+ bcc,
80
+ replyTo,
81
+ subject,
82
+ text,
83
+ html,
84
+ headers,
85
+ attachments,
86
+ mailComposer,
87
+ },
88
+ sent: false,
89
+ sending: 0,
90
+ });
91
+ }
92
+ async sendMailToUsers({ spaceId, fromUserId, toUserIds, ccUserIds, bccUserIds, replyToUserId, subject, text, html, headers, attachments, mailComposer, }) {
93
+ const allUsers = await this.getUsersEmail((0, lodash_1.compact)([
94
+ fromUserId,
95
+ replyToUserId,
96
+ ...toUserIds,
97
+ ...(ccUserIds ?? []),
98
+ ...(bccUserIds ?? []),
99
+ ]), spaceId);
100
+ const from = this.convertUserIdsToEmails([fromUserId], allUsers) ||
101
+ this.configService.get('email.from');
102
+ let to = this.convertUserIdsToEmails(toUserIds, allUsers);
103
+ const cc = this.convertUserIdsToEmails(ccUserIds ?? [], allUsers);
104
+ const bcc = this.convertUserIdsToEmails(bccUserIds ?? [], allUsers);
105
+ if ((0, lodash_1.isEmpty)(to) && (0, lodash_1.isEmpty)(cc) && (0, lodash_1.isEmpty)(bcc)) {
106
+ throw new Error('没有满足要求的接收者');
107
+ }
108
+ to = (0, lodash_1.isEmpty)(to) ? '华炎魔方 <noreply@xxx.com>' : to;
109
+ const replyTo = this.convertUserIdsToEmails([replyToUserId], allUsers);
110
+ await this.mongodbService.insertOne('_mail_queue', {
111
+ createdAt: new Date().toISOString(),
112
+ createdBy: fromUserId ?? '<SERVER>',
113
+ mail: {
114
+ from,
115
+ to,
116
+ cc,
117
+ bcc,
118
+ replyTo,
119
+ subject,
120
+ text,
121
+ html,
122
+ headers,
123
+ attachments,
124
+ mailComposer,
125
+ },
126
+ sent: false,
127
+ sending: 0,
128
+ });
129
+ }
64
130
  async sendMailToUser({ fromUserId, toUserId, subject, text, html, }) {
65
131
  const from = (fromUserId && (await this.getUserEmail(fromUserId))) ||
66
132
  this.configService.get('email.from');
@@ -89,6 +155,48 @@ let EmailService = EmailService_1 = class EmailService {
89
155
  return null;
90
156
  }
91
157
  }
158
+ async getUsersEmail(userIds, spaceId) {
159
+ const [users, spaceUsers] = await Promise.all([
160
+ this.mongodbService.find('users', {
161
+ _id: { $in: userIds },
162
+ email: { $exists: true },
163
+ }, {
164
+ projection: {
165
+ _id: 1,
166
+ name: 1,
167
+ email: 1,
168
+ },
169
+ }),
170
+ this.mongodbService.find('space_users', {
171
+ space: spaceId,
172
+ user: { $in: userIds },
173
+ email_notification: true,
174
+ }, {
175
+ projection: {
176
+ user: 1,
177
+ },
178
+ }),
179
+ ]);
180
+ const spaceUsersIds = spaceUsers.map((spaceUser) => spaceUser.user);
181
+ return (users ?? []).filter((user) => spaceUsersIds.includes(user._id));
182
+ }
183
+ convertUserIdsToEmails(userIds, allUsers) {
184
+ if ((0, lodash_1.isEmpty)(userIds) || (0, lodash_1.isEmpty)(allUsers)) {
185
+ return undefined;
186
+ }
187
+ return (0, lodash_1.compact)(userIds.map((userId) => {
188
+ const currUser = allUsers.find((user) => user._id === userId);
189
+ if (currUser && currUser.name) {
190
+ return `"${currUser.name}" <${currUser.email}>`;
191
+ }
192
+ else if (currUser) {
193
+ return currUser.email;
194
+ }
195
+ else {
196
+ return null;
197
+ }
198
+ })).join(', ');
199
+ }
92
200
  async updateConfig(config) {
93
201
  const emailConfig = {
94
202
  ...this.emailConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/email/email.service.ts"],"names":[],"mappings":"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"}
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.11.12",
3
+ "version": "0.12.1",
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.11.12",
15
+ "@builder6/core": "^0.12.1",
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": "9995c16ebe40080ae99cdf5f91994cba1aff4db6"
23
+ "gitHead": "04c332c3bd98f8df718399b56abbfa7f866904e6",
24
+ "devDependencies": {
25
+ "@types/bluebird": "^3.5.42"
26
+ }
22
27
  }