Sendgrid-nodejs: Π—Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 10 Π°ΠΏΡ€. 2018  Β·  43ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: sendgrid/sendgrid-nodejs

РСзюмС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π‘Π»Π΅Π΄ΠΎΠ²Π°Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ использования Π·Π°ΠΌΠ΅Π½ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΈΡΡŒΠΌΠ°Ρ… Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π΅Π³ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, Π½ΠΎ тСкст Π½Π΅ вставляСтся. Π’ΠΎΡ‚ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΉ элСктронного письма:

image

ДСйствия ΠΏΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ https://github.com/panayi/test-sg/
  2. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚Π΅Π»ΠΎ шаблона ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ создайтС шаблон Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС SendGrid.
  3. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ test.js Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой ΠΊΠ»ΡŽΡ‡ API, адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈ templateId , созданный Π²Ρ‹ΡˆΠ΅.
  4. ЗапуститС node test.js .

ВСхничСскиС подробности:

  • sendgrid-nodejs ВСрсия: @ sendgrid / [email protected]
  • Node.js ВСрсия: 8.6.0
unknown or a help wanted question

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ @himanshupnt , я протСстировал ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон, ΠΈ ΠΎΠ½ сработал. Бпасибо @himanshupnt .

ПозТС я нашСл Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Sendgrid Mail Send with Dynamic Transactional Templates , Ρƒ мСня Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ шаблон (Π½Π΅ старый). Π― использовал Ρ‚ΠΎΡ‚ ΠΆΠ΅ шаблон HTML, ΠΈ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ:

  const sgMail = require("@sendgrid/mail");
  sgMail.setApiKey(process.env.SENDGRID_API_KEY);
  sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally

  const msg = {
    from: "[email protected]",
    templateId: "d-27e7d954368c46519eddc806e5cf8156",
    personalizations: [
      {
        to: [
          {
            email: "[email protected]"
          }
        ],
        dynamic_template_data: {
          name: "Someone",
          city: "Somewhere",
          subject: "Hello new world"
        }
      }
    ]
  };

  sgMail.send(msg).catch(err => console.error(err.message));

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я Π·Π°ΠΌΠ΅Π½ΠΈΠ» «подстановки» Π½Π° Β«dynamic_template_dataΒ» ΠΈ помСстил Β«Π²Π½ΡƒΡ‚Ρ€ΠΈΒ» пСрсонализации, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. И я Ρ‚Π°ΠΊΠΆΠ΅ относился ΠΊ Ρ‚Π΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. (Π²Π²Π΅Π΄ΠΈΡ‚Π΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ Ρ‚Π΅ΠΌΡ‹ шаблона)

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ.

ВсС 43 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @panayi ,

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ:

  1. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ шаблона ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ
  2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ шаблон ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ выглядит ваш HTML?

Бпасибо!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, @thinkingserious , ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ воспроизвСсти Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»
Мой ΠΊΠΎΠ΄ HTML выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ first_name (Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ: employee_id)
НСкоторый HTML-ΠΊΠΎΠ΄

Код

sgMail.setApiKey('apikey');
sgMail.setSubstitutionWrappers('{{', '}}'); // Triied sgMail.setSubstitutionWrappers('-', '-'); as well`

const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Hello plain world!',
  html: 'Hello HTML world!',
  templateId: 'template-id',
  substitutions: {
    first_name: 'Tejas',
    employee_id: 'emp123',
  },
};
sgMail.send(msg);

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: я Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ substitutionWrappers: ['{{', '}}']
Π² сообщСнии, Π½ΠΎ Π±Π΅Π·ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

ВСхничСскиС подробности:

  • sendgrid-nodejs ВСрсия: @ sendgrid / [email protected]
  • Node.js ВСрсия: 8.10.0

Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒ / исправлСниС привСтствуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @tjstlekr!

Π’ своСм HTML-ΠΊΠΎΠ΄Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ first_name Π½Π° {{first_name}} ΠΈ employee_id Π½Π° {{employee_id}} .

Бпасибо!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @thinkingserious ,
Под HTML-ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ΄ шаблона?
ΠŸΠΎΡ‡Π΅ΠΌΡƒ это , Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π° Ρ‚Π΅Π³ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ , Ссли это ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π΅Π»Π΅ запроса здСсь , Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈ использовании ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° страницС ?
Бпасибо!

Π”Π° @tjstlekr , я имСю Π² Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ΄ шаблона, описанный Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ .

Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ваш Π²Ρ‚ΠΎΡ€ΠΎΠΉ вопрос Π±Π΅Π· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π΅Π»ΠΎ запроса ΠΈ ΠΊΠΎΠ΄ шаблона).

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

К соТалСнию! Π£ мСня Π½Π΅Ρ‚ доступа ΠΊ ΠΊΠΎΠ΄Ρƒ шаблона. Π― ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ вСрсии.
Π’ любом случаС спасибо @thinkingserious

Π’Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»:

substitutions: {
    'first_name': 'Tejas',
    'employee_id': 'emp123',
  },

Π”Π°, @thinkingserious ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» это. Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ способы


substitutions: {
    '-first_name-': 'Tejas',
    '-employee_id-': 'emp123',
  },

substitutions: {
    '%first_name%': 'Tejas',
    '%employee_id%': 'emp123',
  },

substitutions: {
    '=first_name=': 'Tejas',
    '=employee_id'=: 'emp123',
  },

@tjstlekr ,

Π― Π΄ΡƒΠΌΠ°ΡŽ, вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ любого, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ шаблона HTML, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ символом (Π°ΠΌΠΈ) подстановки.

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

@thinkingserious ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ шаблона Π”ΠžΠ›Π–ΠΠ« Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ скобки {{name}}. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС SendGrid Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΡƒΠ΄Π° ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹.

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… скобках? Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ, Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ постС Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Ρ‚ΠΈΡ€Π΅, Π° Π½Π΅ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ скобками:
screenshot 2018-06-26 14 08 12

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @tetreault ,

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ скобки. setSubstitutionWrappers позволяСт Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ…, ΠΊΠ°ΠΊ Π²Ρ‹ продСмонстрировали.

Бпасибо!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

Π― столкнулся с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ @panayi .

Π― послСдовал ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… шаблонов . Π― установил ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ подстановки, Π° Π² шаблонС Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ» подстановки Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ скобки. Однако Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ мною элСктронном письмС всС Π·Π°ΠΌΠ΅Π½Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π±Π΅Π· Π·Π°ΠΌΠ΅Π½Ρ‹ прСдоставлСнными мною.

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π΄ΠΈΠ·Π°ΠΉΠ½Π° для шаблона.

ВСхничСскиС подробности:

Бпасибо!

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @nrator!

Если Π±Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹ Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ пустыми строками, я Π±Ρ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ повторяСтС, Π½Π΅ пусты. Если Π²Ρ‹ всС ΠΆΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ пусты, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄Π° вмСстС с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ HTML, Ρ‡Ρ‚ΠΎΠ±Ρ‹ я ΠΌΠΎΠ³ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ воспроизвСсти?

Бпасибо!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @thinkingserious

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° строку, поэтому ΠΎΠ½ΠΈ Π½Π΅ пусты. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, HTML ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Код

const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally

const msg = {
  from: "[email protected]", // my personal email
  to: "[email protected]", // my another personal email
  subject: "Hello world",
  text: "Hello plain world!",
  html: "<p>Hello HTML world!</p>",
  templateId: "d-27e7d954368c46519eddc806e5cf8156",
  substitutions: {
    name: "Some One",
    city: "Denver"
  }
};

  sgMail.send(msg).catch(err => console.error(err.message));

HTML-шаблон

<html>
<head>
    <title></title>
</head>
<body>
Hello {{name}},
<br /><br/>
I'm glad you are trying out the template feature!
<br /><br/>
<%body%>
<br /><br/>
I hope you are having a great day in {{city}} :)
<br /><br/>
</body>
</html>

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»

Hello , 

I'm glad you are trying out the template feature! 

<%body%> 

I hope you are having a great day in :) 

ВСхничСскиС подробности
sendgrid-nodejs ВСрсия: @ sendgrid / [email protected]
Node.js ВСрсия: 8.11.2

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,
ДТСйсон

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Ρƒ мСня такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с шаблонами Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ тСстовыС Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра шаблона Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ управлСния SG, всС выглядит ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.
Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹Π΅ письма ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΠΈ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ шаблоном, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….
Π”Π²Π° дня Π½Π°Π·Π°Π΄ я создал ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π° сСгодня я ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ.
Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΈ это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― просто скопировал старый ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π»
Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.
Β«@ sendgrid / mailΒ»: Β«6.3.1Β» | Node.js 8.10
Π’ΠΎΡ‚ ΠΌΠΎΠΉ ΠΊΠΎΠ΄:

async function sendEmail({ email, firstName, password }) {
  const msg = {
    to: [{ email, firstName }],
    from: {
      email: "[email protected]",
      name: "name"
    },
    asm: {
      group_id: 1234
    },
    templateId: "d-64b15a042b2d41d7a4b5b6a4eea649c5",
    substitutions: {
      userName: firstName,
      email,
      password
    }
  }
  try {
    await sgMail.send(msg);
  } catch(e){
    e.message
  }

  };

А Π²ΠΎΡ‚ ΠΈ шаблон html:

<h3>Hi {{userName}},</h3>

<div><span style="font-size:16px;">Your account has been setup. To login please use</span></div>

<div><span style="font-size:16px;">the credentials below.</span></div>

<div>&nbsp;</div>

<div><span style="font-size:16px;"><strong>Email:</strong>&nbsp;{{email}}</span></div>

<div><strong><span style="font-size:16px;">Password:&nbsp;</span></strong><span style="color: rgb(0, 0, 0); font-family: arial; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">{{password}}</span></div>

<div><span style="font-weight: 600; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-family: arial; font-size: 14px; color: rgb(0, 0, 0);"><span style="font-size: 16px;">SignIn Url: <a href="https://a.abc.com">https://a.abc.com/</a></span></span></div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div><span style="font-size:16px;">Please let us know if you need any help, email us at <a href="mailto:[email protected]">[email protected]</a></span></div>

Π£Ρ€Π°

Π― просто ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π½Π° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ HTML, ΠΈ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, это связано с Π½ΠΎΠ²Ρ‹ΠΌΠΈ измСнСниями Π² V3 API?

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ @himanshupnt , я протСстировал ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон, ΠΈ ΠΎΠ½ сработал. Бпасибо @himanshupnt .

ПозТС я нашСл Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Sendgrid Mail Send with Dynamic Transactional Templates , Ρƒ мСня Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ шаблон (Π½Π΅ старый). Π― использовал Ρ‚ΠΎΡ‚ ΠΆΠ΅ шаблон HTML, ΠΈ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ:

  const sgMail = require("@sendgrid/mail");
  sgMail.setApiKey(process.env.SENDGRID_API_KEY);
  sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally

  const msg = {
    from: "[email protected]",
    templateId: "d-27e7d954368c46519eddc806e5cf8156",
    personalizations: [
      {
        to: [
          {
            email: "[email protected]"
          }
        ],
        dynamic_template_data: {
          name: "Someone",
          city: "Somewhere",
          subject: "Hello new world"
        }
      }
    ]
  };

  sgMail.send(msg).catch(err => console.error(err.message));

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я Π·Π°ΠΌΠ΅Π½ΠΈΠ» «подстановки» Π½Π° Β«dynamic_template_dataΒ» ΠΈ помСстил Β«Π²Π½ΡƒΡ‚Ρ€ΠΈΒ» пСрсонализации, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. И я Ρ‚Π°ΠΊΠΆΠ΅ относился ΠΊ Ρ‚Π΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. (Π²Π²Π΅Π΄ΠΈΡ‚Π΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ Ρ‚Π΅ΠΌΡ‹ шаблона)

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ.

@nrator Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅

Π£ мСня Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ я Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ (ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, упомянутыС Π² Π½Π°Ρ‡Π°Π»Π΅). Однако ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ name ΠΈ city Π² шаблон, упомянутый @nrator . Но Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ <%subject%> ΠΈ <%body%> ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΉ элСктронноС письмо. Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ <%body%> <%subject%> ? @himanshupnt, ΠΊΠ°ΠΊ Π²Ρ‹ это Ρ€Π΅ΡˆΠΈΠ»ΠΈ?

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @ pankaja92 , я Ρ‚ΠΎΠΆΠ΅ Π½Π΅ смог Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ <% subject%>. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Β«dynamic_template_dataΒ», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ я Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽ Π΅Π³ΠΎ Π² {{}} вмСсто <%%> ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Β«dynamic_template_dataΒ».

Π― нашСл эти Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ sendgrid, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚Π΅ΠΌΡ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

@nrator Бпасибо. Π­Ρ‚ΠΎ сработало. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Ρ‚ нСобходимости Π² <% body%> (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅).

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½Π΅ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ‹Ρ‚ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ список Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ? Π― ΠΈΡ‰Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΌΠ½Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ :)

@ pankaja92 Π― Π½Π΅ это сообщСниС Π±Π»ΠΎΠ³Π° sendgrid ΠΎ Π½ΠΎΠ²Ρ‹Ρ… функциях динамичСских шаблонов, Π² основном Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ списки элСмСнтов ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ условныС

ЀактичСскиС ΠΊΠΎΠ΄Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² этом Ρ€Π΅ΠΏΠΎ .

НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚!

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ всСм, Π½Π° эту Ρ‚Π΅ΠΌΡƒ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» нСсколько часов.

ВмСсто использования substitutions ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ dynamicTemplateData Π² основном ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ msg :

const sgMail = require('@sendgrid/mail')

sgMail.setApiKey(process.env.SENDGRID_API_KEY)
sgMail.setSubstitutionWrappers('{{', '}}')

const msg = {
  to: '[email protected]',
  from: '[email protected]',
  templateId: 'd-27e7d954368c46519eddc806e5cf8156',
  dynamicTemplateData: {
    name: 'Some One',
    city: 'Denver',
  },
}

sgMail.send(msg)

Бсылка: https://github.com/sendgrid/sendgrid-nodejs/pull/691

Богласно этому PR, ΠΊΠΎΠ³Π΄Π° templateId являСтся динамичСским шаблоном (с прСфиксом d- ), substitutions Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ отправляСтся, поэтому dynamicTemplateData ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Они создали здСсь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ использованиС динамичСских шаблонов Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ я надСюсь, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚. πŸŽ‰

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: # 703

Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ 'подстановки' Π½Π° 'dynamic_template_data'

@jseyfert, Ρ€Π°Π·Π²Π΅ это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ dynamic_template_data ?

@aroach Ρ‚Ρ‹ ΠΏΡ€Π°Π². Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» свой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

Π‘Π½Π°Ρ‡Π°Π»Π° это Π½Π΅ сработало ΠΈ с ΠΌΠΎΠ΅ΠΉ стороны.
Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ моя вСрсия Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ устарСла (я использовал @ sendgrid / mail @ 6.2.1)
Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» свой ΠΊΠΎΠ΄, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ @ sendgrid / [email protected]

const result = await this.sgMail.send({
                personalizations: [{
                    to: this._to
                }],
                dynamicTemplateData: {
                    test: 'test' <== working (code in template: {{ test }})
                },
                templateId: this._templateId,
            });

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

const result = await this.sgMail.send({
                personalizations: [{
                    to: this._to,
                dynamicTemplateData: {
                    test: 'test' <== NOT working (code in template: {{ test }})
                }
                }],
                templateId: this._templateId,
            });

Π”Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ v6.3.1 для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ dynamic_template_data.

Π’ΠΎ Π²Ρ‚ΠΎΡ€Π½ΠΈΠΊ, 11 дСкабря 2018 Π³., Π² 4:15 Π ΠΎΠΉ ΠœΠΈΠ»Π΄Π΅Ρ€ [email protected] написал:

Π‘Π½Π°Ρ‡Π°Π»Π° это Π½Π΅ сработало ΠΈ с ΠΌΠΎΠ΅ΠΉ стороны.
Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ моя вСрсия Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ устарСла (я использовал
@ sendgrid / mail @ 6.2.1)
Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» свой ΠΊΠΎΠ΄, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ @ sendgrid / [email protected]

const result = await this.sgMail.send ({
пСрсонализации: [{
ΠΊΠΎΠΌΡƒ: this._to
}],
dynamicTemplateData: {
test: 'test' <== Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ (ΠΊΠΎΠ΄ Π² шаблонС: {{test}})
},
templateId: this._templateId,
});

-
Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ это, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вас упомянули.
ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° это письмо Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, просмотритС Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/676#issuecomment-446166152 ,
ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ
https://github.com/notifications/unsubscribe-auth/ACL-sjFRFP8txUETNWFVLs0chW5yyL1Nks5u35OzgaJpZM4TOB5l
.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉ
Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ шаблон Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π° ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ копию.
Ρ‚ΠΎΠ³Π΄Π° всС ваши шаги Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

dynamicTemplateData

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для мСня. Π£ мСня послСдняя вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SendGrid, ΠΈ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· Firebase (Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сСйчас - это отсутствиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ TypeScript ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

@roymilder , большоС Π²Π°ΠΌ спасибо. Π’Π°Ρˆ ΠΎΡ‚Π²Π΅Ρ‚ сдСлал мСня счастливым - Π·Π°ΠΌΠ΅Π½Ρ‹ динамичСских шаблонов ΠΎΡ‡Π΅Π½ΡŒ нСпонятны.
ΠŸΡ€Π΅ΡΡ‚ΠΈΠΆΠ½ΠΎΡΡ‚ΡŒ!

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @OleksiiM!

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚?

@ darren-dev,

Бпасибо Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ! Π§Ρ‚ΠΎ касаСтся отсутствия ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ TypeScript ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ сторону Firebase?

@uups ,

Бпасибо Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

@thinkingserious , Π΄Π°, это Ρ‚Π°ΠΊ. Бпасибо.

@OleksiiM ,

ΠšΡƒΠ΄Π° Π²Ρ‹ посмотрСли Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ? Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскиС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎ ссылкС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π²Π°ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ».

@thinkingserious
ΠΠ°Ρ‡Π°Π»ΠΎΡΡŒ здСсь .

Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚:
"ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° шаблонов Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… способов:
ИспользованиС SMTP Relay
Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° шаблона Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ templates ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹ Web API v3
ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° x-smtpapi Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹ Web API v2 "

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» ΠΊ Β«Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° шаблона Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шаблонов ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹ Web API v3 Β».

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π»ΠΎ нСпонятно:
послСдняя страница ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ список Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Β«ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚Π΅Π»Π° запроса», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ template_id, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ ΠΏΠΎΠ»Π΅ Β«dynamic_template_dataΒ». Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «пСрсонализации» + «подстановки» + Β«template_idΒ», ΠΈ это Π½Π΅ сработало.
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Sendgrid, я Π½Π΅ Π·Π½Π°Π» ΠΎ «старых» ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΈ Β«Π½ΠΎΠ²Ρ‹Ρ…Β» (динамичСских) ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ (страницы Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ sendgrid, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ± этом Π½Π΅ говорят).

Бпасибо, Ρ‡Ρ‚ΠΎ спросили ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π― надСюсь, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ люди смогут ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… нСприятностСй.

@thinkingserious, Ссли ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ:
Π’ настоящСС врСмя я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ эти Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹: https://sendgrid.com/docs/API_Reference/api_v3.html

Π’ инструкциях ΠΏΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ (https://sendgrid.api-docs.io/v3.0/mail-send) dynamic_template_data Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ упоминаСтся Π² пСрсонализации.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ нСясно.

НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚!

@Whatthefoxsays ^^

Бпасибо @OleksiiM ΠΈ @roymilder! Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ вас Π·Π° Π²ΠΊΠ»Π°Π΄ Π² сообщСство Twilio SendGrid :)

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ всСм, Π½Π° эту Ρ‚Π΅ΠΌΡƒ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» нСсколько часов.

ВмСсто использования substitutions ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ dynamicTemplateData Π² основном ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ msg :

const sgMail = require('@sendgrid/mail')

sgMail.setApiKey(process.env.SENDGRID_API_KEY)
sgMail.setSubstitutionWrappers('{{', '}}')

const msg = {
  to: '[email protected]',
  from: '[email protected]',
  templateId: 'd-27e7d954368c46519eddc806e5cf8156',
  dynamicTemplateData: {
    name: 'Some One',
    city: 'Denver',
  },
}

sgMail.send(msg)

Бсылка: # 691

Богласно этому PR, ΠΊΠΎΠ³Π΄Π° templateId являСтся динамичСским шаблоном (с прСфиксом d- ), substitutions Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ отправляСтся, поэтому dynamicTemplateData ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Они создали здСсь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ использованиС динамичСских шаблонов Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ я надСюсь, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚. πŸŽ‰

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 2 Π΄Π½Π΅ΠΉ я ΡƒΠ²ΠΈΠ΄Π΅Π» это ΠΈ заставил это Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @Travotics!

Π‘ ΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ нашли Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅? Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ этот ΠΎΠΏΡ‹Ρ‚. Бпасибо!

Π‘ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌΠΈ поТСланиями,

Π­Π»ΠΌΠ΅Ρ€

@thinkingserious https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/kitchen-sink.md

НСт dynamicTemplateData Π½ΠΎ Π΅ΡΡ‚ΡŒ substitutionWrappers ΠΈ substitutions .

Помимо обновлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ интСрфСйс Ρ‚ΠΈΠΏΠ° MailData (https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/helpers/classes/ mail.d.ts # L117). Для выпусков @ sendgrid / mail, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ substitutions , слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ V2MailData , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ поля substititons ΠΈ substitutionWrappers .

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ @himanshupnt , я протСстировал ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ шаблон, ΠΈ ΠΎΠ½ сработал. Бпасибо @himanshupnt .

ПозТС я нашСл Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Sendgrid Mail Send with Dynamic Transactional Templates , Ρƒ мСня Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ шаблон (Π½Π΅ старый). Π― использовал Ρ‚ΠΎΡ‚ ΠΆΠ΅ шаблон HTML, ΠΈ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ:

  const sgMail = require("@sendgrid/mail");
  sgMail.setApiKey(process.env.SENDGRID_API_KEY);
  sgMail.setSubstitutionWrappers("{{", "}}"); // Configure the substitution tag wrappers globally

  const msg = {
    from: "[email protected]",
    templateId: "d-27e7d954368c46519eddc806e5cf8156",
    personalizations: [
      {
        to: [
          {
            email: "[email protected]"
          }
        ],
        dynamic_template_data: {
          name: "Someone",
          city: "Somewhere",
          subject: "Hello new world"
        }
      }
    ]
  };

  sgMail.send(msg).catch(err => console.error(err.message));

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я Π·Π°ΠΌΠ΅Π½ΠΈΠ» «подстановки» Π½Π° Β«dynamic_template_dataΒ» ΠΈ помСстил Β«Π²Π½ΡƒΡ‚Ρ€ΠΈΒ» пСрсонализации, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. И я Ρ‚Π°ΠΊΠΆΠ΅ относился ΠΊ Ρ‚Π΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. (Π²Π²Π΅Π΄ΠΈΡ‚Π΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ Ρ‚Π΅ΠΌΡ‹ шаблона)

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ.

Бпасибо Π²Π°ΠΌ большоС Π·Π° это! Π― ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ для этого. : /

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ