У меня возникают проблемы с добавлением данных substitutions
в электронные письма, отправленные из Sendgrid через Firebase Cloud Functions.
Вот моя function
exports.firestoreEmail = functions.firestore
.document('users/{id}')
.onCreate(snap => {
const user = snap.data();
const msg = {
to: user.email,
from: '[email protected]',
subject: '${user.firstName}, please Verify Your Email Address',
templateId: 'templateID',
substitutionWrappers: ['{{', '}}'],
substitutions: {
firstName: user.firstName,
email: user.email,
id: user.id
}
};
return sgMail
.send(msg)
.then(() => console.log('email sent!'))
.catch(err => console.log(err));
});
и шаблон транзакции для templateId
равен
<html>
<head></head>
<body>{{firstName}} - {{email}} - {{id}}</body>
</html>
Это возвращает электронное письмо на user.email
как предполагалось, но с пробелами, в которых должны быть данные substitutions
.
После документов и примеры использования здесь я также пытался добавить
sgMail.setSubstitutionWrappers('{{', '}}');
глобально setSubstitutionWrappers
. Все еще не работает.
У меня также есть console.log(user)
который возвращает данные, которые будут переданы в substitutions
в консоли.
Что мне не хватает? Данные доступны, письмо правильно отформатировано, и функция следует точно в случаях SendGrid.
Мне удалось понять это через много часов, понимая, что substitutions
и substitutionWrappers
предназначены для Legacy Transactional Templates.
Вместо этого для v3
API вы должны использовать dynamic_template_data
вместо substitutions
а substitutionWrappers
как представляется, устанавливаются как handlebars {{ }}
.
dynamic_template_data: {
firstName: user.firstName,
email: user.email,
id: user.id
}
В следующий раз я обязательно прочитаю и не просмотрю документацию... скорее всего, нет.