增加邮件发送代码
This commit is contained in:
parent
ef84705b25
commit
d09e94260a
@ -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=
|
@ -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<Server, IncomingMessage, ServerResponse>
|
||||
|
||||
@ -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()
|
||||
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user