Sendgrid-nodejs: Подстановки Sendgrid v3 Nodejs в шаблонах не работают

Созданный на 18 апр. 2018  ·  15Комментарии  ·  Источник: sendgrid/sendgrid-nodejs

Здравствуй,

В пакете sendgrid nodejs npm я столкнулся с проблемой. Я могу отправлять электронные письма с заменами и шаблоном, но проблема заключается в электронной почте на стороне клиента, подстановки% name%,% company% и т. Д. Не заменяются значением.

Фрагмент кода
const sgMail = require ('@ sendgrid / mail');
sgMail.setApiKey (sendgrid_key);
var msg =
{
"персонализации": [{
"к": [{
"email": " [email protected] ",
"name": "Некоторая компания"
}],
"замены": {
"% name%": "Джон",
"% company%": "Некоторая компания",
"% business%": "Быстрее Pheny"
},
"subject": "Счет-фактура для какой-то компании!"
}],
"от": {
"email": "CompanyA [email protected] ",
"name": "CompanyA"
},
"ответить на": {
"электронная почта": " [email protected] ",
"name": "Служба поддержки клиентов"
},
"subject": "Счет для какой-то компании!",
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.send (сообщение)
.then (() => {
console.log ('SendGrid :: Response после успешной отправки электронного письма!');
})
.catch (error => {
console.error ('Ошибка SendGrid :::' + error.toString ());
});

Код выполняется и получает электронное письмо без замен для% name%,% business%,% company%


Теперь я попытался использовать веб-сайт sengrid https://sendgrid.com/docs/API_Reference/api_v3.html
Он отправляет электронную почту идеально, без каких-либо проблем, и все замены сделаны правильно.

Что не так в коде javascript npm, который я использую для установки значений в sgMail.send (msg)?

Запросите вашу помощь.

question

Самый полезный комментарий

Sendgrid v3 требует замены замен на dynamic_template_data примерно так:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

Все 15 Комментарий

Похоже, вам не хватает оберток подстановки. Я просто использовал пример, который они использовали в этом случае с простым шаблоном, и он работает.

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers('{{', '}}'); // Configure the substitution tag wrappers globally
const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Notification',
  html: '<p></p>',
  templateId: 'your-id-goes-here',
  substitutions: {
    name: 'John'
  },

};
sgMail.send(msg);

Мой шаблон состоит только из этого фрагмента кода:

<%body%> {{name}}

Очевидно, часть <%body%> является обязательной.

Возможно, вы можете попробовать установить для своих оболочек что-то вроде {{ , }} или что-то еще (или % , % в вашем случае), также обратите внимание что пример не включает оболочки в объекте замены, а только имя замены.

Попробуйте что-то вроде этого:

"substitutions": {
  name: "John",
  company: "Some Company",
  business: "Faster Pheny"
},

Фантастика. Это сработало. Благодаря тонну. Замена Wrapper это то, чего не хватало.

Спасибо за полный ответ. Удачного кодирования!

@adamreisnz ,

Возможно, нам следует по умолчанию вызвать sgMail.setSubstitutionWrappers('{{', '}}'); , чтобы избежать подобных проблем в будущем. Что вы думаете?

@thinkingserious Но мы делаем именно это; см. https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/mail/src/classes/mail-service.js#L21

@adamreisnz ,

Может быть, мы попытаемся обнаружить несколько распространенных оболочек, например% или _?

Это будет круто. Когда пользователь через портал Sendgrid создает / проектирует шаблон, портал по умолчанию вставляет замену% body% и% name%. Поэтому, естественно, пользователь подумает, что не следует менять символ%, и продолжит работу с шаблоном, поскольку он не полностью осведомлен о функциональности. Если Sendgrid может предложить, чтобы% можно было изменить на любой символ или функция предпочитает {{}}, тогда пользователь будет использовать его или шаблон, который загружает настройки по умолчанию, в первую очередь заменяет% на {{. Это позволит избежать проблемы, с которой я столкнулся.

Мне не нравится автоматическое обнаружение, если только это не очень надежный алгоритм. Проблема с попыткой сделать процесс слишком умным в том, что это может привести к потенциально трудным для отладки ошибкам. Что, если кто-то использует _ для выделения? Например, действительно подчеркнуто. Это не означает, что символ _ является оболочкой подстановки. То же самое с % , вы можете использовать его для процентов, и это может обмануть алгоритм, заставив его думать, что вы используете его как оболочку подстановки, где это не так.

Поскольку Sendgrid переходит на шаблоны handlebars, которые используют {{ и }} в качестве оберток подстановки, я думаю, что это разумный вариант по умолчанию. Есть причина, по которой эти символы используются в качестве оболочек подстановки в таких языках, как ручки, потому что они не очень распространены в обычном языке. Подчеркивание и процент встречаются чаще и, следовательно, могут быть неверно истолкованы.

Я думаю, что нужно просто хорошо задокументировать это, чтобы прояснить это. Имея возможность указать собственную оболочку, у пользователя должно быть все необходимое для ее работы.

Если у кого-то есть идея надежного автоматического обнаружения, я бы хотел увидеть псевдоалгоритм, который может хорошо обрабатывать все сценарии и все возможные оболочки, избегая при этом ложных срабатываний.

Мысли?

Согласен. Обновления документации будут лучшим вариантом.

@adamreisnz @vinvantest согласился, пожалуйста, просмотрите https://github.com/sendgrid/sendgrid-nodejs/issues/681 для получения информации о ходе работы.

Sendgrid v3 требует замены замен на dynamic_template_data примерно так:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

@goelmk ,

Вот полный пример. Спасибо!

С наилучшими пожеланиями,

Элмер

Очень сбивает с толку то, что вы должны использовать dynamic_template_data
Было бы неплохо обновить документацию https://sendgrid.com/docs/API_Reference/api_v3.html

Я пробовал следовать самому последнему примеру
Мой шаблон был создан с использованием вашего WYSIWYG-редактора, и я попытался вставить {{verifyUrl}} как в текстовый компонент, так и в URL-ссылку компонента кнопки. ни один не работает.

@shawnkoh Вы это решили? Я также создал шаблон с помощью визуального дизайнера, и замена не работает.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги