2023-03-09 08:14:29 +00:00
|
|
|
import nodemailer from "nodemailer";
|
2023-05-05 06:15:47 +00:00
|
|
|
import { createLogger } from "@saleor/apps-shared";
|
2023-03-09 08:14:29 +00:00
|
|
|
|
2023-05-05 06:15:47 +00:00
|
|
|
const logger = createLogger({
|
2023-03-09 08:14:29 +00:00
|
|
|
fn: "sendEmailWithSmtp",
|
|
|
|
});
|
|
|
|
|
2023-03-16 18:07:24 +00:00
|
|
|
export interface SendMailArgs {
|
2023-03-09 08:14:29 +00:00
|
|
|
smtpSettings: {
|
|
|
|
host: string;
|
|
|
|
port: number;
|
2023-03-16 18:07:24 +00:00
|
|
|
auth?: {
|
|
|
|
user: string;
|
|
|
|
pass: string | undefined;
|
|
|
|
};
|
2023-03-09 08:14:29 +00:00
|
|
|
};
|
|
|
|
mailData: {
|
|
|
|
from: string;
|
|
|
|
to: string;
|
|
|
|
text: string;
|
|
|
|
html: string;
|
|
|
|
subject: string;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export const sendEmailWithSmtp = async ({ smtpSettings, mailData }: SendMailArgs) => {
|
|
|
|
logger.debug("Sending an email with SMTP");
|
|
|
|
try {
|
|
|
|
const transporter = nodemailer.createTransport({
|
|
|
|
...smtpSettings,
|
|
|
|
});
|
|
|
|
|
|
|
|
const response = await transporter.sendMail({
|
|
|
|
...mailData,
|
|
|
|
});
|
2023-05-05 06:15:47 +00:00
|
|
|
|
2023-03-09 08:14:29 +00:00
|
|
|
logger.debug("An email has been sent");
|
|
|
|
return { response };
|
|
|
|
} catch (error) {
|
|
|
|
logger.error("Error during sending the email");
|
|
|
|
if (error instanceof Error) {
|
|
|
|
logger.error(error.message);
|
|
|
|
return { errors: [{ message: error.message }] };
|
|
|
|
}
|
|
|
|
return { errors: [{ message: "SMTP error" }] };
|
|
|
|
}
|
|
|
|
};
|