Отправка писем из NestJs с помощью API Mailgun

Несколько месяцев назад я настроил рассылку с помощью nodemailer с mailgun, которая работала хорошо, но у меня возникло несколько повторяющихся проблем, поэтому я переключил реализацию с SMTP на API, и я нашел ее довольно простой, чем SMTP, поскольку не нужно использовать никаких дополнительных библиотек, кроме клиента запросов axios.

Фрагмент реализации выглядит следующим образом:

public async sendMail(mail: IMail) {
const mailOptions: MailInput = {
from: `SON <${configService.get('SENDER_EMAIL')}>`,
to: mail.to,
subject: mail.subject,
}
if (mail.template) {
const emailTemplateSource = fs.readFileSync(path.join(__dirname, `../../templates/${mail.template}.hbs`), "utf8")
const template = handlebars.compile(emailTemplateSource);
const htmlToSend = template(mail.templateVariables)
mailOptions.html = htmlToSend
} else {
mailOptions.text = mail.text;
}
try {
const body = Object.keys(mailOptions).map((key, index) => `${key}=${encodeURIComponent(mailOptions[key])}`).join('&');
const response = await axios.post(`https://api.mailgun.net/v3/${configService.get('MAILGUN_DOMAIN')}/messages`,
body,
{
auth: {
username: 'api',
password: configService.get('MAILGUN_API_KEY')
},
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
});
Logger.log(`Email successfully sent to: ${mail.to}.`)
return response;
} catch (error) {
Logger.warn(`Problem in sending email: ${error}`);
throw error;
}
}

Оцените статью
devanswers.ru
Добавить комментарий