wallet-mail/src/services/MailService.ts
2024-05-16 10:13:53 +08:00

46 lines
1.4 KiB
TypeScript

import { singleton } from 'decorators/singleton'
import { createTransport, Transporter } from 'nodemailer'
import Mail from 'nodemailer/lib/mailer'
import FormData from 'form-data'
import Mailgun, { InputFormData } from 'mailgun.js'
import { ZError } from 'common/ZError'
@singleton
export class MailService {
private transporter: Transporter
private mailClient: any
constructor() {
// const options = {
// host: process.env.MAIL_SMTP_HOST,
// secure: true,
// auth: {
// user: process.env.MAIL_SMTP_USER,
// pass: process.env.MAIL_SMTP_PASS,
// },
// logger: true,
// debug: false,
// }
// // @ts-ignore
// this.transporter = createTransport(options, {})
const mailgun = new Mailgun(FormData)
this.mailClient = mailgun.client({ username: 'api', key: process.env.MAILGUN_API_KEY })
}
public async send(message: Mail.Options) {
// await this.transporter.verify()
// return this.transporter.sendMail(message)
const domain = 'counterfire.games'
const sendResult = await this.mailClient.messages.create(domain, {
from: message.from,
to: message.to,
subject: message.subject,
html: message.html,
text: message.text,
})
if (sendResult.status !== 200) {
throw new ZError(20, sendResult.message)
}
return { messageId: sendResult.id }
}
}