diff --git a/.env.production b/.env.production index 56f1c8e..1d37fcd 100644 --- a/.env.production +++ b/.env.production @@ -2,3 +2,10 @@ API_PORT=3087 API_HOST=0.0.0.0 API_TOKEN_SECRET=sdf(**&*&xx2214 API_TOKEN_EXPIRESIN=1d + + +MAIL_SMTP_HOST= +MAIL_SMTP_PORT= +MAIL_SMTP_SECURE= +MAIL_SMTP_USER= +MAIL_SMTP_PASS= \ No newline at end of file diff --git a/src/api.server.ts b/src/api.server.ts index 692363b..84898c0 100644 --- a/src/api.server.ts +++ b/src/api.server.ts @@ -8,11 +8,25 @@ const NODE_ENV = process.env.NODE_ENV || 'development' const zReqParserPlugin = require('plugins/zReqParser') const zTokenParserPlugin = require('plugins/zTokenParser') +const apiAuthPlugin = require('plugins/apiauth') const fs = require('fs') const join = require('path').join const env = process.env - +;(() => { + let path + switch (process.env.NODE_ENV) { + case 'test': + path = `${__dirname}/../.env.development` + break + case 'production': + path = `${__dirname}/../.env.production` + break + default: + path = `${__dirname}/../.env.development` + } + dotenv.config({ path: path, debug: NODE_ENV === 'development' }) +})() export class ApiServer { server: FastifyInstance @@ -27,10 +41,10 @@ export class ApiServer { this.server.register(helmet, { hidePoweredBy: false }) this.server.register(zTokenParserPlugin) - // this.server.register(apiAuthPlugin, { - // secret: config.api.token_secret, - // expiresIn: config.api.token_expiresIn, - // }) + this.server.register(apiAuthPlugin, { + secret: process.env.API_TOKEN_SECRET, + expiresIn: process.env.API_TOKEN_EXPIRESIN, + }) if (process.env.NODE_ENV !== 'production') { this.server.register(require('@fastify/cors'), {}) } @@ -120,25 +134,10 @@ export class ApiServer { return payload }) } - private loadConfig() { - let path - switch (process.env.NODE_ENV) { - case 'test': - path = `${__dirname}/../.env.development` - break - case 'production': - path = `${__dirname}/../.env.production` - break - default: - path = `${__dirname}/../.env.development` - } - dotenv.config({ path: path, debug: NODE_ENV === 'development' }) - } public async start() { let self = this return new Promise(async (resolve, reject) => { - self.loadConfig() self.initControllers() self.registerRouter() self.setErrHandler() diff --git a/src/controllers/mail.controller.ts b/src/controllers/mail.controller.ts index b25e0ac..1aeca3c 100644 --- a/src/controllers/mail.controller.ts +++ b/src/controllers/mail.controller.ts @@ -6,12 +6,12 @@ import { MailQueue } from 'queue/mail.queue' class MailController extends BaseController { @role('anon') @router('post /mail/send') - async registWebClient(req, res) { - let { data } = req.params - if (!data) { + async sendOneMail(req, res) { + let { message } = req.params + if (!message) { throw new ZError(10, 'params mismatch') } - const qrId = new MailQueue().addTaskToQueue(data) - return {} + const result = await new MailQueue().addTaskToQueue(message) + return { msgId: result.messageId } } } diff --git a/src/queue/mail.queue.ts b/src/queue/mail.queue.ts index b2145de..4b6b4dd 100644 --- a/src/queue/mail.queue.ts +++ b/src/queue/mail.queue.ts @@ -1,6 +1,8 @@ import { AsyncQueue, createAsyncQueue } from 'common/AsyncQueue' import { singleton } from 'decorators/singleton' +import logger from 'logger/logger' import { MailService } from 'services/MailService' +import { Deferred } from 'utils/promise.util' @singleton export class MailQueue { @@ -10,12 +12,20 @@ export class MailQueue { } public async addTaskToQueue(data: any) { + let deferred = new Deferred() this.queue.push(async () => { try { - await new MailService().send(data) + let info = await new MailService().send(data) + logger.info( + `send mail success:: from: ${data.from}, to: ${data.to}, subject: ${data.subject}, messageId: ${info.messageId}`, + ) + deferred.resolve(info) } catch (err) { - console.log('send mail error.') + logger.info(`send mail error:: from: ${data.from}, to: ${data.to}, subject: ${data.subject}`) + logger.error(err) + deferred.reject(err) } }) + return deferred.promise } } diff --git a/src/services/MailService.ts b/src/services/MailService.ts index db6d3c7..c18bb18 100644 --- a/src/services/MailService.ts +++ b/src/services/MailService.ts @@ -8,8 +8,7 @@ export class MailService { constructor() { const options = { host: process.env.MAIL_SMTP_HOST, - port: +process.env.MAIL_SMTP_PORT, - secure: process.env.MAIL_SMTP_SECURE, + secure: true, auth: { user: process.env.MAIL_SMTP_USER, pass: process.env.MAIL_SMTP_PASS, @@ -18,10 +17,11 @@ export class MailService { debug: false, } // @ts-ignore - this.transporter = createTransport(options, { from: '' }) + this.transporter = createTransport(options, {}) } - public send(message: Mail.Options) { + public async send(message: Mail.Options) { + await this.transporter.verify() return this.transporter.sendMail(message) } }