рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛, рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдИрдореЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ
test.js
рдЕрдкрдиреА API рдХреБрдВрдЬреА, рдЕрдкрдирд╛ рдИрдореЗрд▓ рдкрддрд╛, рдФрд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП templateId
рдЖрдкрдиреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рд╣реИредnode test.js
рдЪрд▓рд╛рдПрдВредрд╣реИрд▓реЛ @ рдЕрдкрд╛рдирд╛рдп ,
рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╛рддреЗрдВ:
рдХреНрдпрд╛ рдЖрдк рдпрд╣ рднреА рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ 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: ['{{', '}}']
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ
рд╕рдВрджреЗрд╢ рдХреЗ рднреАрддрд░ рд▓реЗрдХрд┐рди рдХреЛрдИ рднрд╛рдЧреНрдп рдХреЗ рд╕рд╛рдеред
рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА:
рдХрд┐рд╕реА рднреА рдорджрдж / рдлрд┐рдХреНрд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛рдпрд╛ рд╣реИ
рдирдорд╕реНрдХрд╛рд░ @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 рдЕрднреНрдпрд╕реНрдд рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдХрд╣рд╛рдВ рдЫреЛрдбрд╝рдирд╛ рд╣реИред
рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрдмрд▓ рдХреЛрд╖реНрдардХ рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдореИрдВ рдЖрдЧреЗ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдКрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдбреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдП рдЧрдП, рди рдХрд┐ рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ:
рдирдорд╕реНрдХрд╛рд░ @tetreault ,
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред setSubstitutionWrappers
рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
рд╢реБрднрдХрд╛рдордирд╛рдПрдВ,
рдПрд▓реНрдорд░
рдореИрдВ @panayi рдЬреИрд╕реЗ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░
рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдирдореВрдиреЗ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд░реИрдкрд░реНрд╕ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рдбрдмрд▓ рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЬреЛ рдИрдореЗрд▓ рдорд┐рд▓рд╛ рдерд╛, рдЙрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрдкрд╛рджрдХ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА:
рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рдп @ рд╕реВрддреНрд░рдзрд╛рд░ ,
рдпрджрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд░рд┐рдХреНрдд рддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореИрдВ рджреЛрдЧреБрдирд╛ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрд┐рди рдЪрд░реЛрдВ рдкрд░ рдЖрдк рдЪрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд 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> </div>
<div><span style="font-size:16px;"><strong>Email:</strong> {{email}}</span></div>
<div><strong><span style="font-size:16px;">Password: </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> </div>
<div> </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" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдВрджрд░" "рд╡реИрдпрдХреНрддрд┐рдХрд░рдг" рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдХреЛ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ {{рд╡рд┐рд╖рдп}} рдбрд╛рд▓реЗрдВ)
рдзрдиреНрдпрд╡рд╛рджред
рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдордп рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рд╣реИред : /
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирдорд╕реНрддреЗ, @hhanshupnt рдХреА рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рд╛рднрд╛рд░ @himanshupnt
рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ Sendgrid рдкреНрд░рд▓реЗрдЦрди рдореЗрд▓ рднреЗрдЬреЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛, рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рд╛ рд╣реИ (рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рдирд╣реАрдВ)ред рдореИрдВрдиреЗ рдЙрд╕реА HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдореЗрд░рд╛ рдХреЛрдб рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ "substitutions" рдХреЛ "dynam_template_data" рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрдВрджрд░" "рд╡реИрдпрдХреНрддрд┐рдХрд░рдг" рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╖рдп рдХреЛ "рдбрд╛рдпрдиреЗрдорд┐рдХ_рдЯреЗрдордкреНрд▓реЗрдЯ_рдбрд╛рдЯрд╛" рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ {{рд╡рд┐рд╖рдп}} рдбрд╛рд▓реЗрдВ)
рдзрдиреНрдпрд╡рд╛рджред