70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import * as plugins from './smartsmtp.plugins.js';
|
|
|
|
export interface ISmartSmtpOptions {
|
|
smtpServer: string;
|
|
smtpUser: string;
|
|
smtpPassword: string;
|
|
}
|
|
|
|
/**
|
|
* Use it to send mails via smtp
|
|
*/
|
|
export class Smartsmtp {
|
|
public static async createSmartsmtpWithRelay(optionsArg: ISmartSmtpOptions) {
|
|
const nodemailerTransport = plugins.nodemailer.createTransport({
|
|
host: optionsArg.smtpServer,
|
|
port: 465,
|
|
secure: true, // upgrade later with STARTTLS
|
|
auth: {
|
|
user: optionsArg.smtpUser,
|
|
pass: optionsArg.smtpPassword,
|
|
},
|
|
});
|
|
return new Smartsmtp(nodemailerTransport);
|
|
}
|
|
|
|
public static async createSmartsmtpSendmail() {
|
|
const nodemailerTransport = plugins.nodemailer.createTransport({
|
|
sendmail: true,
|
|
newline: 'unix',
|
|
});
|
|
return new Smartsmtp(nodemailerTransport);
|
|
}
|
|
|
|
public nodemailerTransport: plugins.nodemailer.Transporter;
|
|
constructor(transporterArg: plugins.nodemailer.Transporter) {
|
|
this.nodemailerTransport = transporterArg;
|
|
}
|
|
|
|
/**
|
|
* sends a SmartMail
|
|
*/
|
|
public async sendSmartMail(
|
|
smartmailArg: plugins.smartmail.Smartmail<any>,
|
|
toArg: string,
|
|
dataArg = {}
|
|
) {
|
|
const message: plugins.nodemailer.SendMailOptions = {
|
|
from: smartmailArg.options.from,
|
|
to: toArg,
|
|
subject: smartmailArg.getSubject(dataArg),
|
|
text: smartmailArg.getBody(dataArg),
|
|
html: smartmailArg.getBody(dataArg),
|
|
attachments: [],
|
|
};
|
|
|
|
// lets add attachments from smartmailArg
|
|
for (const attachment of smartmailArg.attachments) {
|
|
message.attachments.push({
|
|
filename: attachment.parsedPath.base,
|
|
content: attachment.contentBuffer,
|
|
});
|
|
}
|
|
|
|
const response = await this.nodemailerTransport.sendMail(message).catch((err) => {
|
|
console.log(err);
|
|
});
|
|
return response;
|
|
}
|
|
}
|