Sendgrid-nodejs: рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рджрд┐рд╕ре░ 2017  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

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

рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реНрдЯреАрдЯреНрдпреВрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

  1. рдЕрдкрдиреЗ SendGrid рдЦрд╛рддреЗ рдореЗрдВ рдПрдХ рд▓реЗрдирджреЗрди рдИрдореЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдБ
  2. рдпрд╛ рддреЛ <% body%> рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ,% firstName% рдпрд╛ рджреЛрдиреЛрдВ (рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА)
  3. рдЗрд╕ рдиреЛрдб рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рднрд░реЗрдВ)
`'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();`
  1. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбрд┐рд▓реАрд╡рд░ рдХрд┐рдП рдЧрдП рдИрдореЗрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ SendGrid рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдФрд░ рдореБрдЭреЗ рдкреНрд░рд╛рдкреНрдд рдИрдореЗрд▓ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
screenshot from 2017-12-08 10-36-26

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

  • sendgrid-nodejs рд╕рдВрд╕реНрдХрд░рдг: 6.1.4
  • Node.js рд╕рдВрд╕реНрдХрд░рдг: 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

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

рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд╣рддрд╛рд╢ рдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП: v3 API, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ dynamic_template_data рдХреЗ рдмрдЬрд╛рдп substitutions , рдпрд╣ рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ!

рддрдм рдХрд╛ рдЙрдкрдпреЛрдЧ {{var_name}} рдИрдореЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдФрд░ dynamic_template_data: { var_name: "var_value" } API рдХреЙрд▓ рдореЗрдВред

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

@MaciejKrawczyk рдХреНрдпрд╛ рдЖрдкрдиреЗ setSubstitutionWrapper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ substitutions рд╕реЗ рд░реИрдкрд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ?

Ex:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╛рде рдХрдИ рд░реИрдкрд░ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░реИрдкрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореЗрд░рд╛ рд╕рдмрд╕реЗрдВрдЯ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

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

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк @MaciejKrawczyk рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ!

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ README рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП! рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП 2hrs рд▓рд╛рдЧрдд!

@ рд▓рд╕рдХреБрдорд╛ ,

рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ :(

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

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

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

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

@thinkings рд░рд╣рд╕реНрдпрдордп рд╣рд╛рдБред рдЗрд╕ рдбреЙрдХ рдиреЗ рдмрд╣реБрдд рдорджрдж рдХреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рд╕реЗ рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЖрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреБрдВрдЬреА рдореЗрдВ рдЖрд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред

рд╣рд╛рдп @ рд▓рд╕реБрдорд╛ ,

рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЖрдП рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ URL рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж!

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

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

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИред

рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдлреА рдпрдХреАрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рд╡реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рд╣рд╛рдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ README рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣рд╛рдБ рд╣реИ ? рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

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

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

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реАрдбрдореА рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВрдиреЗ рд╕реЗрдВрдбрдЧреНрд░рд┐рдб рдЖрдкреА рд╕рдВрджрд░реНрдн рдкрд░ рд╕рднреА рдбреЙрдХреНрд╕ рдкрдврд╝реЗ, рд╕рдм рдХреБрдЫ рдЬреЛ рдЧреАрдерд╣рдм (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛) рдкрд░ рдерд╛, рд╕рдорд░реНрдерди рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдЕрдкрдирд╛ рдПрдкрд┐ рд░реИрдкрд░ @kmcurry рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рдХрдо рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣реЗрд▓реНрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрд┐рд▓реНрдХреБрд▓ рдПрдкреАрдЖрдИ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдзрд╛рдЧреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореЗрд░рд╛ рдХреЛрдб рджреЗрдЦреЗрдВ)ред

рдзрдиреНрдпрд╡рд╛рдж @MaciejKrawczyk ,

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЧрд╣рд░реА рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЯреАрдо рдХреЗ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИред рд╣рдо рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред

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

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

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

рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБ;

рд╣рд╛рдп @ рд╢реНрд░реАрд╣рд░рд┐рд╖рд╛ ,

рдХреНрдпрд╛ рдЖрдкрдиреЗ @kmcurry рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ

рдЕрднреА рдирд╣реАрдВред рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рддреЛ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред
рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд╣рддрд╛рд╢ рдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП: v3 API, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ dynamic_template_data рдХреЗ рдмрдЬрд╛рдп substitutions , рдпрд╣ рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ!

рддрдм рдХрд╛ рдЙрдкрдпреЛрдЧ {{var_name}} рдИрдореЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдФрд░ dynamic_template_data: { var_name: "var_value" } API рдХреЙрд▓ рдореЗрдВред

@tkafka рдУрд╣

@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 !

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

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

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

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

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

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

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