Sendgrid-nodejs: рдХрд╛рдо рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрджрд╛рд░реНрде

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  43рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sendgrid/sendgrid-nodejs

рд╕рд╛рд░рд╛рдВрд╢ рдЬрд╛рд░реА рдХрд░реЛ

рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛, рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдИрдореЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ

image

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛

  1. рдХреНрд▓реЛрди https://github.com/panayi/test-sg/
  2. рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмреЙрдбреА рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ SendGrid UI рдкрд░ рдПрдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдБред
  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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдирдорд╕реНрддреЗ, @hhanshupnt рдХреА рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рд╛рднрд╛рд░ @himanshupnt

рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ Sendgrid рдкреНрд░рд▓реЗрдЦрди рдореЗрд▓ рднреЗрдЬреЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛, рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рд╛ рд╣реИ (рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рдирд╣реАрдВ)ред рдореИрдВрдиреЗ рдЙрд╕реА 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));

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ "substitutions" рдХреЛ "dynam_template_data" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдВрджрд░" "рд╡реИрдпрдХреНрддрд┐рдХрд░рдг" рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдХреЛ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ {{рд╡рд┐рд╖рдп}} рдбрд╛рд▓реЗрдВ)

рдзрдиреНрдпрд╡рд╛рджред

рд╕рднреА 43 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реИрд▓реЛ @ рдЕрдкрд╛рдирд╛рдп ,

рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╛рддреЗрдВ:

  1. рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдИрдбреА рд╕рд╣реА рд╣реИ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  2. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ UI рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ

рдХреНрдпрд╛ рдЖрдк рдпрд╣ рднреА рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ HTML рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

рдирдорд╕реНрдХрд╛рд░, @thinkingsouble , рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреИрд╕рд╛ @panayi рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
рдореЗрд░рд╛ Html рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ

рд╣реИрд▓реЛ рдкрд╣рд▓реЗ_рдирд╛рдо (рдХрд░реНрдордЪрд╛рд░реА: рдХрд░реНрдордЪрд╛рд░реА_рдЖрдИрдбреА)
рдХреБрдЫ 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}} рдмрджрд▓реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

рд╣реИрд▓реЛ @thinkings рд░рд╣рд╕реНрдпрдордп ,
HTML рдХреЛрдб рджреНрд╡рд╛рд░рд╛, рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╣реИ?
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рднреАрддрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЯреИрдЧ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкреГрд╖реНрда рдкрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ?
рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдВ @tjstlekr , рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдбред

рдореИрдВ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред (рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз рд╢рд░реАрд░ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб)ред

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ! рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред
рд╡реИрд╕реЗ рднреА рдзрдиреНрдпрд╡рд╛рдж @thinkings рд░рд╣рд╕реНрдпрдордп

рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

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

рд╣рд╛рдВ, @thinkings рд░рд╣рд╕реНрдпрдордп рдиреЗ рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рднреА рдЖрдЬрдорд╛рдП рд╣реИрдВ


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

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

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

@tjstlekr ,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЬреЛ рдХреЛрдИ рднреА рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЪрд░рд┐рддреНрд░ (рдУрдВ) рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддрд╛ рд╣реИред

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

@thinkings рд░рд╣рд╕реНрдпрдордп рд╕рд╣реА рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪрд░ рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ {{рдирд╛рдо}} рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛ SendGrid рдЕрднреНрдпрд╕реНрдд рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдХрд╣рд╛рдВ рдЫреЛрдбрд╝рдирд╛ рд╣реИред

рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрдмрд▓ рдХреЛрд╖реНрдардХ рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдореИрдВ рдЖрдЧреЗ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдКрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдбреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдП рдЧрдП, рди рдХрд┐ рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ:
screenshot 2018-06-26 14 08 12

рдирдорд╕реНрдХрд╛рд░ @tetreault ,

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред setSubstitutionWrappers рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

рдореИрдВ @panayi рдЬреИрд╕реЗ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░

рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдирдореВрдиреЗ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд░реИрдкрд░реНрд╕ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЬреЛ рдИрдореЗрд▓ рдорд┐рд▓рд╛ рдерд╛, рдЙрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрдкрд╛рджрдХ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред

рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА:

  • sendgrid-nodejs рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг: @ sendgrid / [email protected] рдФрд░ рд╕рдВрд╕реНрдХрд░рдг: @ sendgrid / mail_6.2.1
  • Node.js рд╕рдВрд╕реНрдХрд░рдг: 8.11.2

рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдп @ рд╕реВрддреНрд░рдзрд╛рд░ ,

рдпрджрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд░рд┐рдХреНрдд рддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореИрдВ рджреЛрдЧреБрдирд╛ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрд┐рди рдЪрд░реЛрдВ рдкрд░ рдЖрдк рдЪрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд HTML рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕реНрдирд┐рдкрд┐рдЯ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХреВрдВ?

рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

рд╣рд╛рдп @ рд╕реЛрдЪ-рд╕рдордЭрдХрд░

рдореИрдВ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рд╡реЗ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ, 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

рд╕рд╛рджрд░,
рдЬреЗрд╕рди

рдирдорд╕реНрддреЗ рдореИрдВ transactional рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБред рдЪрд░ рдкрд┐рдХрдЕрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред SG рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╕рдм рдХреБрдЫ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред
рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдорд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рд╣реА рд╡реНрдпрдХреНрддрд┐ рдФрд░ рд╕рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдИрдореЗрд▓ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ 2 рджрд┐рди рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЖрдЬ рдореИрдВрдиреЗ рдирдП рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛
рд▓реЗрди-рджреЗрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рд╡рд┐рд░рд╛рд╕рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рд╣реИ рдЬреЛ рдерд╛
рдЕрдЪреНрдЫрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
"@ sendgrid / mail": "6.3.1" | рдиреЛрдб.рдЬреЗрдПрд╕ 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 рдПрдкреАрдЖрдИ рдореЗрдВ рдирдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдирдорд╕реНрддреЗ, @hhanshupnt рдХреА рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рд╛рднрд╛рд░ @himanshupnt

рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ Sendgrid рдкреНрд░рд▓реЗрдЦрди рдореЗрд▓ рднреЗрдЬреЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛, рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рд╛ рд╣реИ (рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рдирд╣реАрдВ)ред рдореИрдВрдиреЗ рдЙрд╕реА 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));

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ "substitutions" рдХреЛ "dynam_template_data" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдВрджрд░" "рд╡реИрдпрдХреНрддрд┐рдХрд░рдг" рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдХреЛ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ {{рд╡рд┐рд╖рдп}} рдбрд╛рд▓реЗрдВ)

рдзрдиреНрдпрд╡рд╛рджред

@nrator рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ред рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдПрдХ рдореБрджреНрджрд╛ рднреА рдЦреЛрд▓рд╛ рд╣реИ (рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рдмрд╛рдж)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ @nrator рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ name рдФрд░ city рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рд▓реЗрдХрд┐рди рд╡реЗ <%subject%> рдФрд░ <%body%> рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрд╕ рдИрдореЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИред рдореИрдВ <%body%> рдФрд░ <%subject%> рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ? @himanshupnt рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛?

рд╣рд╛рдп @ pankaja92 , рдореИрдВ <% рд╡рд┐рд╖рдп%> рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЕрдм рд╡рд┐рд╖рдп рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдореЗрд░рд╛ рддрд░реАрдХрд╛ рдЗрд╕реЗ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ <%%> рдХреЗ рдмрдЬрд╛рдп {{}} рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ "рдбрд╛рдпрдиреЗрдорд┐рдХ_template_data" рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдпрд╣ Sendgrid рдбреЙрдХреНрд╕ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╖рдп рдкрд░рдо рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

@ рд╢реНрд░реЛрддрд╛ рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд░ рджрд┐рдпрд╛ред рддреЛ, рд╡рд╣рд╛рдБ <% рд╢рд░реАрд░%> рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╕рд╣реА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднреА рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред

Btw, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ - рд▓реЗрдХрд┐рди, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрднрд╡ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдореИрдВ рдПрдХ рдРрд╕реА рдЪреАрдЬ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдЕрдкрдирд╛ рдРрдк рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗ :)

@ pankaja92 рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреЗрдЬрдХрд░ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдЗрд╕ рдкреНрд░реЗрд╖рд┐рдд рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдм рдЖрдк рдЖрдЗрдЯрдо рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рд░реЗрдкреЛ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдБ рдХреА рдпреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛!

рд╣рд╛рдп рд╕рдм, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднреА рдХреБрдЫ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдПред

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

рдЙрд╕ рдкреАрдЖрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрдм templateId рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ ( d- рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ), substitutions рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП dynamicTemplateData рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбреЙрдХреНрд╕ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рддрдХ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред ЁЯОЙ

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ: # 703

рдкрд░рд┐рд╡рд░реНрддрди 'рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди' рдХреЛ 'dynam_template_data'

@jseyfert рдпрд╣ dynamic_template_data рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ рдмрд░реЛрдЪ рдЖрдк рд╕рд╣реА рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдЕрдкрдбреЗрдЯ рдХрд░ рджреА рд╣реИред

рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдореЗрд░реА рддрд░рдл рд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреБрд░рд╛рдирд╛ рдерд╛ (рдореИрдВ @ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Tue рдкрд░, 11 рджрд┐рд╕рдВрдмрд░, 2018 рдХреЛ рд╕реБрдмрд╣ 4:15 рдмрдЬреЗ рд░реЙрдп рдорд┐рд▓рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдореЗрд░реА рддрд░рдл рд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреБрд░рд╛рдирд╛ рдерд╛ (рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛
@ sendgrid / рдореЗрд▓ @ 6.2.1)
рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдкрдирд╛ рдХреЛрдб рдмрджрд▓реЛ рдФрд░ рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

@ sendgrid / [email protected] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

const result = рдЗрд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВред sgMail.send ({
рд╡реНрдпрдХреНрддрд┐рддреНрд╡: [{
рдХреЛ: рдпрд╣
}],
рдбрд╛рдпрдирд╛рдореЗрдЯрдкреНрд▓реЗрдЯрдбреЗрдЯрд╛: {
рдкрд░реАрдХреНрд╖рдг: 'рдкрд░реАрдХреНрд╖рдг' <== рдХрд╛рдо (рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреЛрдб: {{рдкрд░реАрдХреНрд╖рдг}})
},
templateId: рдпрд╣ ред_templateId,
};

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/sendgrid/sendgrid-nodejs/issues/676#issuecomment-446166152
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ACL-sjFRFP8txUETNWFFLLs0chW5yyL1Nks5u35OzgaJpZM4Tn5l
ред

рд╣рд╛рдп, рднреВрд▓ рдордд рдЬрд╛рдирд╛
рд▓реЗрди-рджреЗрди рдХрд╛ рдЦрд╛рдХрд╛ рди рдмрдирд╛рдПрдВ, рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЦрд╛рдХрд╛ рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдБред
рддрдм рд╣рд░ рдХрджрдо рдЬреЛ рдЖрдк рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

dynamicTemplateData

рдореЗрд░реЗ рд▓рд┐рдпреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ SendGrid рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Firebase (рдХрд╛рд░реНрдп) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди рдХреА рдХрдореА рд╣реИ - рдФрд░ рдкреНрд░рд▓реЗрдЦрдиред

@ рд╕рд░реЛрдХрд╛рд░ , рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдирд╛ рджрд┐рдпрд╛ - рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
рдХреБрджреЛрд╕!

рдирдорд╕реНрдХрд╛рд░ @OleksiiM ,

рдХреНрдпрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдорджрдж рдХрд░рддрд╛ рд╣реИ?

@ рдбреЗрд░реЗрди-рджреЗрд╡,

рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреНрдпрд╛ рдЖрдк рдлрд╛рдпрд░рдмреЗрд╕ рдкрдХреНрд╖ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@ рдмреИрдХрдЕрдк ,

рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

@ рдЪрд┐рдВрддрдирд╢реАрд▓ , рд╣рд╛рдБ рдпрд╣ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

@ рдУрд▓реЗрдХреНрд╕реАрдПрдо ,

рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛рдВ рджреЗрдЦрд╛ рдерд╛? рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рднреЗрдЬреЗ рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдЬрд╛рдирд╛ рд╣реИред

@ рдЪрд┐рдВрддрдирд╢реАрд▓
рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред

рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:
"рд▓реЗрди-рджреЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрдореНрдкрд▓реЗрдЯ
рдЖрдк рддреАрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
SMTP рд░рд┐рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╡реЗрдм API v3 рдореЗрд▓ рднреЗрдЬреЗрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдИрдбреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛
рд╡реЗрдм API v2 рдореЗрд▓ рднреЗрдЬреЗрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдореЗрдВ x-smtpapi рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ "

рдЗрд╕рд▓рд┐рдП рдореИрдВ " рд╡реЗрдм рдПрдкреАрдЖрдИ v3 рдореЗрд▓ рд╕реЗрдВрдб рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдИрдбреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП" рдХреВрдж рдЧрдпрд╛ред

рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рдХреНрдпреЛрдВ рдерд╛:
рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рд╕рдВрднрд╛рд╡рд┐рдд "рдмреЙрдбреА рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреА рд╕реВрдЪреА" рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ_рдб рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбреЗрдЯрд╛" рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдореИрдВрдиреЗ "рдирд┐рдЬреАрдХрд░рдг" + "рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди" + "рдЯреЗрдореНрдкрд▓реЗрдЯ_рдб" рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдирдпрд╛ 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)

рд╕рдВрджрд░реНрдн: # рем реп рез

рдЙрд╕ рдкреАрдЖрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрдм templateId рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ ( d- рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ), substitutions рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП dynamicTemplateData рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдбреЙрдХреНрд╕ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рддрдХ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред ЁЯОЙ

2 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ред

рд╣реИрд▓реЛ @Travotics ,

рдЙрдкрд░реЛрдХреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдкреНрд░рд▓реЗрдЦрди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛? рдореИрдВ рдЗрд╕ рдЕрдиреБрднрд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж!

рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,

рдПрд▓реНрдорд░

@thinkings рд░рд╣рд╕реНрдпрдордп 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 рдлрд╝реАрд▓реНрдб рдЫреВрдЯреЗ рд╣реБрдП рд╣реЛрдВред

рдирдорд╕реНрддреЗ, @hhanshupnt рдХреА рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рд╛рднрд╛рд░ @himanshupnt

рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ Sendgrid рдкреНрд░рд▓реЗрдЦрди рдореЗрд▓ рднреЗрдЬреЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛, рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рд╛ рд╣реИ (рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рдирд╣реАрдВ)ред рдореИрдВрдиреЗ рдЙрд╕реА 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));

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ "substitutions" рдХреЛ "dynam_template_data" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдВрджрд░" "рд╡реИрдпрдХреНрддрд┐рдХрд░рдг" рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдХреЛ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ {{рд╡рд┐рд╖рдп}} рдбрд╛рд▓реЗрдВ)

рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдордп рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рд╣реИред : /

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mikemaccana picture mikemaccana  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zvone187 picture zvone187  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

murphman300 picture murphman300  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

metalshan picture metalshan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Chrischuck picture Chrischuck  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ