You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
import type { NotificationAgentEmail } from '@server/lib/settings';
|
|
import { getSettings } from '@server/lib/settings';
|
|
import Email from 'email-templates';
|
|
import nodemailer from 'nodemailer';
|
|
import { URL } from 'url';
|
|
import { openpgpEncrypt } from './openpgpEncrypt';
|
|
|
|
class PreparedEmail extends Email {
|
|
public constructor(settings: NotificationAgentEmail, pgpKey?: string) {
|
|
const { applicationUrl } = getSettings().main;
|
|
|
|
const transport = nodemailer.createTransport({
|
|
name: applicationUrl ? new URL(applicationUrl).hostname : undefined,
|
|
host: settings.options.smtpHost,
|
|
port: settings.options.smtpPort,
|
|
secure: settings.options.secure,
|
|
ignoreTLS: settings.options.ignoreTls,
|
|
requireTLS: settings.options.requireTls,
|
|
tls: settings.options.allowSelfSigned
|
|
? {
|
|
rejectUnauthorized: false,
|
|
}
|
|
: undefined,
|
|
auth:
|
|
settings.options.authUser && settings.options.authPass
|
|
? {
|
|
user: settings.options.authUser,
|
|
pass: settings.options.authPass,
|
|
}
|
|
: undefined,
|
|
});
|
|
|
|
if (pgpKey) {
|
|
transport.use(
|
|
'stream',
|
|
openpgpEncrypt({
|
|
signingKey: settings.options.pgpPrivateKey,
|
|
password: settings.options.pgpPassword,
|
|
encryptionKeys: [pgpKey],
|
|
})
|
|
);
|
|
}
|
|
|
|
super({
|
|
message: {
|
|
from: {
|
|
name: settings.options.senderName,
|
|
address: settings.options.emailFrom,
|
|
},
|
|
},
|
|
send: true,
|
|
transport: transport,
|
|
});
|
|
}
|
|
}
|
|
|
|
export default PreparedEmail;
|