Nodejs V3 API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдИрдореЗрд▓ рднреЗрдЬрддреЗ рд╕рдордп, рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
{
[SendGridError: Response error] message: 'Response error' }
{
statusCode: 401,
body: '{"errors":[{"message":"The provided authorization grant is invalid, expired, or revoked","field":null,"help":null}]}',
headers: {
server: 'nginx',
date: 'Wed, 31 Aug 2016 18:34:49 GMT',
'content-type': 'application/json',
'content-length': '116',
connection: 'close',
'x-frame-options': 'DENY'
}
}
}
рдпрд╣ рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рд▓рд╛рдЗрд╡ рд╕рд░реНрд╡рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var helper = require('sendgrid').mail,
sg = require('sendgrid')(SENDGRID_API_KEY);
var from_email = new helper.Email('[email protected]');
var to_email = new helper.Email(myOwnEmail);
var subject = 'Subject';
var content = new helper.Content('text/plain', 'test');
var mail = new helper.Mail(from_email, subject, to_email, content);
var request = sg.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON()
});
sg.API(request, function(err, response) {
console.log(err, response);
if (!err) {
res.send({
message: 'An email has been sent to the provided email with further instructions.'
});
} else {
return res.status(400).send({
message: 'Failure sending email'
});
}
});
рд╣рд╛рдп @ рдирд┐рдиреЛрдХреНрд╕ 92 ,
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреА API рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ, рдХреГрдкрдпрд╛ SENGRID_API_KEY рдХрд╛ рдорд╛рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдлрд┐рд░ https://support.sendgrid.com рдкрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдЯреАрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ
рдзрдиреНрдпрд╡рд╛рдж!
SENGRID_API_KEY рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдИ рдмрдирд╛рдИ рдЧрдИ API рдХреБрдВрдЬреА рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рднреА рдХрд┐рдпрд╛ рд╣реИред
рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП CURL POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдПрдХ рд╣реА API рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рдорд░реНрдерди рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ SENGRID_API_KEY
рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм SENDGRID_API_KEY
рдЪрд░ рдирд╛рдо рдЯрд╛рдЗрдкреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрд╕реЗ рдмрджрд▓ рджреВрдВрдЧрд╛ред рдлрд┐рд░ рднреА рдЪрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореЗрд░реА рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рд╕реЗ рднрд░рд╛ рдерд╛ред
рдореИрдВрдиреЗ рдмрд╕ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдпрд╣рд╛рдБ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИ:
var helper = require('sendgrid').mail;
var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);
var from_email = new helper.Email('[email protected]');
var to_email = new helper.Email('[email protected]');
var subject = 'Subject';
var content = new helper.Content('text/plain', 'test');
var mail = new helper.Mail(from_email, subject, to_email, content);
var request = sg.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON(),
});
sg.API(request, function(err, response) {
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
});
рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреБрд░реНрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдореИрдВрдиреЗ рдирд┐рдореНрди рд╣реИрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд╡рд┐рд╢реНрд╡! Sendgrid рдХрд░реНрд▓ рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рд╕реЗ
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer SENDGRID_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "<my-own-email>"}]}],"from": {"email": "[email protected]"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
рдирдорд╕реНрдХрд╛рд░ @ рдирд┐рдиреЛрдХреНрд╕ 92 ,
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдирдореВрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?
рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреА API рдХреБрдВрдЬреА рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛:
var sg = require('sendgrid')('SG.XXXXXXXXXXXXXXXXXXX');
рдореИрдВрдиреЗ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ред рдЕрдм рдореИрдВ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рдЬрдмрдХрд┐ рд╕рдорд░реНрдерди рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред
рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдКрдкрд░ рдФрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ! рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред
рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдореЗрд░реА рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ
рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ рдореИрдВ рдПрдХ рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
const express = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдПрдХреНрд╕рдкреНрд░реЗрд╕');
const app = express ();
var sg = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('sendgrid') (process.env.SENDGRID_API_KEY);
var port = process.env.PORT || 8080;
app.get ('/', function (req, res) {
var рд╕рд╣рд╛рдпрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('sendgrid') рдореЗрд▓;
var fromEmail = new helper.Email ('[email protected] ');
var toEmail = new helper.Email ('[email protected] ');
var рд╡рд┐рд╖рдп = 'SendGrid Node.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!'
var рд╕рд╛рдордЧреНрд░реА = рдирдпрд╛ рд╕рд╣рд╛рдпрдХред рдЕрд╕рдВрдЧрдд ('рдкрд╛рда / рд╕рд╛рджрд╛', 'рд╣реИрд▓реЛ, рдИрдореЗрд▓!');
var рдореЗрд▓ = new helper.Mail (fromEmail, рд╕рдмреНрдЬреЗрдХреНрдЯ, рдЗрдореЗрд▓, рдХрдВрдЯреЗрдВрдЯ);
var рдЕрдиреБрд░реЛрдз = sg.emptyRequest ({
рд╡рд┐рдзрд┐: 'рдкреЛрд╕реНрдЯ',
рдкрде: '/ v3 / рдореЗрд▓ / рднреЗрдЬреЗрдВ',
рд╢рд░реАрд░: mail.toJSON ()
};
sg.API (рдЕрдиреБрд░реЛрдз, рдлрд╝рдВрдХреНрд╢рди (рддреНрд░реБрдЯрд┐, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) {
рдЕрдЧрд░ (рддреНрд░реБрдЯрд┐) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд');
}
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛.рд╕реНрдЯреИрдЯрд╕рдХреЛрдб);
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛.рдмреЙрдбреА);
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╣реЗрдбрд░);
};
};
app.listen (рдкреЛрд░реНрдЯ, рдлрд╝рдВрдХреНрд╢рди () {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ("рд╕реБрдирдХрд░: *" + рдмрдВрджрд░рдЧрд╛рд╣);
};
рдФрд░ рдореЗрд░реА .env.example рдлрд╝рд╛рдЗрд▓ рдкрд░
SENDGRID_API_KEY = рдпрд╣рд╛рдБ рдХреЛрдб / * рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдБ рдПрдкреАрдЖрдИ рдХреЛрдб рд╣реИ * /
рдпрджрд┐ рдЖрдкрдХреЛ рдкреЛрд╕реНрдЯ рдореЗрдереЛрдб рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
var рд╕рд╣рд╛рдпрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('sendgrid') рдореЗрд▓;
рд░рд╛рдКрдЯрд░.рдкреЛрд╕реНрдЯ ('/', рдлрдВрдХреНрд╢рди (req, res) {
var sg=require('sendgrid')('your api key from your account');
var formEmail= new helper.Email('[email protected]');
var toEmail= new helper.Email(req.body.mail);
var subject='text';
var content = new helper.Content('text/plain', 'Your password has been successfully changed');
var mail = new helper.Mail(formEmail, subject, toEmail, content);
var request =sg.emptyRequest({
method:'POST',
path: '/v3/mail/send',
body: mail.toJSON()
});
sg.API(request , function (error , response) {
if(error){
console.log('Error response not valid');
}
});
})
рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕ = рд░рд╛рдЙрдЯрд░;
рдЗрд╕рдХреА рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдм рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдереА рдпрд╣ рдПрдХ 202 рддреНрд░реБрдЯрд┐ рдереАред рдорд╛рдлрд╝ рдХрд░рдирд╛
рдмрд╕ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдореИрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдк SendGrid рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЕрджреНрдпрддрд┐рдд рд╣реИ!
рдореИрдВ C # рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг 9.9.0
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рдиреАрд▓реЗ рд░рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд▓рдЧреАред рдореИрдВрдиреЗ 9.10.0
рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ред
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ C # Twilio рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рднреА рдпрд╣реА рдореБрджреНрджрд╛ рдерд╛ рдХрд┐ рдореЗрд░реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдПрдХ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЧрдпрд╛ред рдмрд╕ Twilio aquiring SendGrid рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛?
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЧрд▓рд╛ рдерд╛:
рдореЗрд░рд╛ IDE (Intellij CE 2020.10.3) рдореЗрд░реЗ engrromet рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдкрд╣рдЪрд╛рди рд░рд╣рд╛ рдерд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реЗ Sendgrid рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдореВрд▓реНрдп ej: SG.sddDDeq.qwt .env рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рд▓реЗ рд░рд╣рд╛ рдерд╛, ej: "C: / Users / Users / Me / MyProjectRootFolder / sendgrid.env "рдФрд░ рдЗрд╕реЗ Sendgrid Request Headers рдХреЛ" Authorization "рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:" Bearer C: /User/Me/MyProjectRootFolder/sgrgr.env: "wich рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ" рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг "ред рдЕрдиреБрджрд╛рди рдЕрдорд╛рдиреНрдп рд╣реИ ... "ред
рд╕реВ ... рдЖрдк рд╣реЗрдбрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХреА рдЧрдИ рдХреБрдВрдЬреА рдорд╛рдиреНрдп рд╣реИ (рдЖрдк рдЕрдкрдиреЗ рдПрдирд╡реА рдЪрд░ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ), рдФрд░ рдЖрдкрдХреЛ SendGrid рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдПрдХ рдбреЛрдореЗрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпрд╛ рдПрдХрд▓ рдкреНрд░реЗрд╖рдХ рд╕рддреНрдпрд╛рдкрди рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ред рдЕрдм рдореИрдВ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рдЬрдмрдХрд┐ рд╕рдорд░реНрдерди рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред