Sendgrid-nodejs: рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрджрд╛рди рдЕрдорд╛рдиреНрдп рд╣реИ, рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (401)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рд╕рд┐рддре░ 2016  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sendgrid/sendgrid-nodejs

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

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'
        });
    }
});

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

  • рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: рд╡рд┐рдВрдбреЛрдЬ 10 x64
  • рдЬреАрд╡рди рд░рдХреНрд╖рдХ: рд╣рд░реЛрдХреВ
  • sendgrid-nodejs рд╕рдВрд╕реНрдХрд░рдг: 4.0.2
  • рдПрдирдкреАрдПрдо рд╕рдВрд╕реНрдХрд░рдг: 3.7.5
  • рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг: 4.4.5
help wanted question

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

рдореИрдВрдиреЗ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ред рдЕрдм рдореИрдВ рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рдЬрдмрдХрд┐ рд╕рдорд░реНрдерди рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

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

рд╣рд╛рдп @ рдирд┐рдиреЛрдХреНрд╕ 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 рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдПрдХ рдбреЛрдореЗрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпрд╛ рдПрдХрд▓ рдкреНрд░реЗрд╖рдХ рд╕рддреНрдпрд╛рдкрди рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗред

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

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

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

Loriot-n picture Loriot-n  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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