При использовании этой библиотеки подстановки не работают. Работает при использовании curl.
`'use strict';
var config = {
apiKey: '',
from: '',
to: '',
templateId: ''
}
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);
async function sendTest() {
var newMsg = {
"from": {
"name": "Test Script",
"email": config.from
},
"personalizations": [{
"to": config.to,
"substitutions": {
"-firstName-": "Maciejs",
"%firstName%": "Maciej",
"-first_name": "Maciej",
"%first_name%": "Maciej"
}
}],
"subject": "test subject",
"content": [{
"type": "text/plain",
"value": "Hello, %firstName%!"
},
{
"type": "text/html",
"value": "<html><p>Hello, %firstName%!</html> "
}],
"template_id": config.templateId
}
await sgMail.send(newMsg);
}
sendTest();`
Я также прилагаю скриншот шаблона в редакторе SendGrid и полученное письмо по электронной почте
@MaciejKrawczyk Вы пробовали использовать setSubstitutionWrapper
и опускать обертки из substitutions
?
Пример:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": {
"firstName": "Maciejs"
}
Не знаю, как сделать таким образом сразу несколько оболочек, но мне удалось заставить подпрограммы работать с этой версией, не указав обертки в атрибуте подстановки. Мои сабы выглядят как
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName
Оно работает. Спасибо!
Спасибо, что помогли @kmcurry!
Я рад, что у вас есть @MaciejKrawczyk!
Это обязательно нужно поместить в README! Мне потребовалось 2 часа, чтобы понять это!
@LASkuma ,
Это не хорошо :(
Эта документация помогает? Если да, не могли бы вы указать мне, где вы в первую очередь искали помощь, чтобы я мог убедиться, что у нас есть четкая ссылка?
Спасибо!
С наилучшими пожеланиями,
Элмер
@thinkingserious Да. Этот документ действительно очень помог. Однако, поскольку я пришел с официального сайта, где ключи подстановки должны включать оболочку, я не уделял слишком много внимания вариантам использования.
Привет @LASkuma!
Когда вы говорите, что пришли с официального сайта, не могли бы вы сообщить мне, какой URL-адрес вы имеете в виду? Спасибо!
Привет @thinkingserious ,
Я имел в виду эту страницу . Даже в разделе опробования есть ключи подстановки с включенными обертками. Прочитав документацию, я подумал, что библиотека Node естественно соответствует документации.
Спасибо @LASkuma!
Это действительно полезный отзыв.
Однако я не совсем уверен в решении. Эти документы предназначены для тех, кто хочет напрямую взаимодействовать с нашим API, а не использовать одну из наших вспомогательных библиотек.
Ранее вы упомянули, что мы должны включить эту документацию в README. Вы имеете в виду здесь ? Должны ли мы конкретно указать здесь вариант использования замены?
В очередной раз благодарим за помощь!
С наилучшими пожеланиями,
Элмер
Это обязательно должно быть в ридми. Я перепробовал все, я прочитал все документы по ссылке api SendGrid, все, что есть на GitHub (я думал), связался с поддержкой, и я бы сделал свою собственную оболочку api, если бы не @kmcurry, я думаю, это было бы намного проще и менее запутанно если бы вспомогательная библиотека работала точно так же, как сам API (см. мой код в начале потока).
Спасибо @MaciejKrawczyk ,
Это очень хороший отзыв, и я добавил его в список невыполненных работ нашей команды для более глубокого изучения. Мы будем предоставлять обновления в этой теме.
Спасибо!
С наилучшими пожеланиями,
Элмер
Это сделано? У меня такая же проблема;
Привет @sriharrsha ,
Вы пробовали предложение @kmcurry ?
Еще нет. Я обновлю, если это сработает или нет, в ближайшее время.
Извините за задержку с ответом.
Всем столь же отчаявшимся, как я вчера: в v3 API вам нужно использовать dynamic_template_data
вместо substitutions
, это еще нигде не задокументировано!
Затем используйте {{var_name}}
в шаблоне электронной почты и dynamic_template_data: { var_name: "var_value" }
в вызове API.
@tkafka боже мой! Спасибо за этого мужчину, который выдергивал мои волосы последние 2 дня.
@tkafka Большое спасибо! Это так неприятно! Занял у меня 3 часа дня ...
Вот весь код на тот случай, если кто-то ищет то же самое:
var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');
var newMsg = {
"from": {
"name": "Your Company",
"email": env.businessEmail
},
"personalizations": [{
"to": order.email,
"dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
}],
"subject": "test subject",
"content": [{
"type": "text/plain",
"value": "Hello, {{firstName}}!"
},
{
"type": "text/html",
"value": "<html><p>Hello, {{'firstName}}!</html> "
}],
"template_id": env.sendgridOrderConfirmationTemplateId
};
console.log("Sending confirmation email...")
return sendgrid.send(newMsg);
Документация sendgrid по меньшей мере ужасна.
Здравствуйте все,
Пожалуйста, просмотрите эту проблему для прогресса. В настоящее время мы работаем над обновлением для C #, затем для Java, а затем сразу после этого SDK. Благодарим за терпение и приносим свои извинения за задержку.
С наилучшими пожеланиями,
Элмер
Ха, dynamic_template_data
. Я решил твою маленькую головоломку! :улыбка:
Для других пользователей машинописного текста - Создайте файл mail.d.ts
:
import {MailData} from "@sendgrid/helpers/classes/mail";
// see https://github.com/sendgrid/sendgrid-nodejs/issues/638
declare module "@sendgrid/helpers/classes/mail" {
export interface MailData {
dynamic_template_data: {[key: string]: string};
}
}
Спасибо @xduseko !
Самый полезный комментарий
Всем столь же отчаявшимся, как я вчера: в v3 API вам нужно использовать
dynamic_template_data
вместоsubstitutions
, это еще нигде не задокументировано!Затем используйте
{{var_name}}
в шаблоне электронной почты иdynamic_template_data: { var_name: "var_value" }
в вызове API.