- Node.js
- Express.js
- @sendgrid/mail
- SendGrid (динамические шаблоны и HTML-шаблоны)
Основные наблюдения:
Один и тот же шаблон работает правильно в большинстве случаев.
Проблема решается автоматически через некоторое время.
Для того, чтобы он снова начал работать, не требуется никаких изменений кода или повторного развертывания.
Изначально я использовал динамические шаблоны SendGrid с Dynamic_template_data.
После обнаружения этой проблемы я преобразовал все шаблоны в чистые HTML-шаблоны, предполагая, что проблема связана с динамическими данными шаблона.
Однако проблема по-прежнему иногда возникает, даже с HTML-шаблонами.
Я также обращался в службу поддержки SendGrid, но они не смогли определить основную причину.
Функция отправки электронной почты
Код: Выделить всё
exports.sendPaymentDueDateReminderEmail = async ({
email,
subject,
url,
beneficiary,
sponsorName,
dueDateWithDetails,
}) => {
try {
mailConfigObj.to = email;
mailConfigObj.cc = ADMIN_EMAIL_ADDRESS;
mailConfigObj.dynamic_template_data = {
subject: sanitizeForTemplate(subject),
url: sanitizeForTemplate(url),
beneficiary: sanitizeForTemplate(beneficiary),
sponsorName: sanitizeForTemplate(sponsorName),
dueDateWithDetails: sanitizeForTemplate(dueDateWithDetails),
};
mailConfigObj.template_id = "DYNAMIC_TEMPLATE_ID";
const response = await sgMail.send(mailConfigObj);
return response;
} catch (error) {
console.error(error);
throw error;
}
};
SendGrid configuration
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const MAIL_FROM = {
email: "no-reply@example.com",
name: "System Notification",
};
const mailConfigObj = {
from: MAIL_FROM,
};
Sanitization helper
const sanitizeForTemplate = (value) => {
if (value === null || value === undefined) return "";
return String(value);
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... js-express
Мобильная версия