рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реНрдЯреАрдЯреНрдпреВрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
`'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();`
рдореИрдВ SendGrid рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдФрд░ рдореБрдЭреЗ рдкреНрд░рд╛рдкреНрдд рдИрдореЗрд▓ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
@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 !
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд╣рддрд╛рд╢ рдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП: v3 API, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
dynamic_template_data
рдХреЗ рдмрдЬрд╛рдпsubstitutions
, рдпрд╣ рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ!рддрдм рдХрд╛ рдЙрдкрдпреЛрдЧ
{{var_name}}
рдИрдореЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдФрд░dynamic_template_data: { var_name: "var_value" }
API рдХреЙрд▓ рдореЗрдВред