mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-15 19:16:22 +00:00
100 lines
2.4 KiB
TypeScript
100 lines
2.4 KiB
TypeScript
import nodemailer from "nodemailer";
|
|
import {
|
|
SMTP_HOST_GMAIL,
|
|
SMTP_HOST_MAILGUN,
|
|
SMTP_HOST_OFFICE365,
|
|
SMTP_HOST_SENDGRID,
|
|
SMTP_HOST_SOCKETLABS,
|
|
SMTP_HOST_ZOHOMAIL
|
|
} from "../variables";
|
|
import SMTPConnection from "nodemailer/lib/smtp-connection";
|
|
import * as Sentry from "@sentry/node";
|
|
import {
|
|
getSmtpHost,
|
|
getSmtpPassword,
|
|
getSmtpPort,
|
|
getSmtpSecure,
|
|
getSmtpUsername,
|
|
} from "../config";
|
|
import { getLogger } from "../utils/logger";
|
|
|
|
export const initSmtp = async () => {
|
|
const mailOpts: SMTPConnection.Options = {
|
|
host: await getSmtpHost(),
|
|
port: await getSmtpPort(),
|
|
};
|
|
|
|
if ((await getSmtpUsername()) && (await getSmtpPassword())) {
|
|
mailOpts.auth = {
|
|
user: await getSmtpUsername(),
|
|
pass: await getSmtpPassword(),
|
|
};
|
|
}
|
|
|
|
if ((await getSmtpSecure()) ? (await getSmtpSecure()) : false) {
|
|
switch (await getSmtpHost()) {
|
|
case SMTP_HOST_SENDGRID:
|
|
mailOpts.requireTLS = true;
|
|
break;
|
|
case SMTP_HOST_MAILGUN:
|
|
mailOpts.requireTLS = true;
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2",
|
|
}
|
|
break;
|
|
case SMTP_HOST_SOCKETLABS:
|
|
mailOpts.requireTLS = true;
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2",
|
|
}
|
|
break;
|
|
case SMTP_HOST_ZOHOMAIL:
|
|
mailOpts.requireTLS = true;
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2",
|
|
}
|
|
break;
|
|
case SMTP_HOST_GMAIL:
|
|
mailOpts.requireTLS = true;
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2",
|
|
}
|
|
break;
|
|
case SMTP_HOST_OFFICE365:
|
|
mailOpts.requireTLS = true;
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2"
|
|
}
|
|
break;
|
|
default:
|
|
if ((await getSmtpHost()).includes("amazonaws.com")) {
|
|
mailOpts.tls = {
|
|
ciphers: "TLSv1.2",
|
|
}
|
|
} else {
|
|
mailOpts.secure = true;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
const transporter = nodemailer.createTransport(mailOpts);
|
|
transporter
|
|
.verify()
|
|
.then(async () => {
|
|
Sentry.setUser(null);
|
|
Sentry.captureMessage("SMTP - Successfully connected");
|
|
(await getLogger("backend-main")).info(
|
|
"SMTP - Successfully connected"
|
|
);
|
|
})
|
|
.catch(async (err) => {
|
|
Sentry.setUser(null);
|
|
Sentry.captureException(
|
|
`SMTP - Failed to connect to ${await getSmtpHost()}:${await getSmtpPort()} \n\t${err}`
|
|
);
|
|
});
|
|
|
|
return transporter;
|
|
};
|