Π‘Π»Π΅Π΄ΠΎΠ²Π°Π» ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΌΠ΅Π½ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΡ ΠΏΠΈΡΡΠΌΠ°Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π΅Π³ΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΡΡΡΡ, Π½ΠΎ ΡΠ΅ΠΊΡΡ Π½Π΅ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ. ΠΠΎΡ ΡΠΊΡΠΈΠ½ΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΉ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΈΡΡΠΌΠ°:
test.js
ΡΡΠΎΠ±Ρ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ»ΡΡ API, Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ ΠΈ templateId
, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅.node test.js
.ΠΡΠΈΠ²Π΅Ρ @panayi ,
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ:
ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²Π°Ρ HTML?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
ΠΡΠΈΠ²Π΅Ρ, @thinkingserious , ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»
ΠΠΎΠΉ ΠΊΠΎΠ΄ HTML Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ
ΠΡΠΈΠ²Π΅Ρ first_name (Π‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊ: employee_id)
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΉ 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}}
.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
ΠΡΠΈΠ²Π΅Ρ @thinkingserious ,
ΠΠΎΠ΄ HTML-ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π² Π²ΠΈΠ΄Ρ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π°?
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ , ΡΡΠΎ Π·Π°ΠΌΠ΅Π½Π° ΡΠ΅Π³ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ , Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ° Π·Π΄Π΅ΡΡ , Π½ΠΎ Π½Π΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΠ° @tjstlekr , Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ .
Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²Π°Ρ Π²ΡΠΎΡΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π±Π΅Π· ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π°).
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ! Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠ΄Ρ ΡΠ°Π±Π»ΠΎΠ½Π°. Π― ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ.
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ @thinkingserious
Π’Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»:
substitutions: {
'first_name': 'Tejas',
'employee_id': 'emp123',
},
ΠΠ°, @thinkingserious ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΡΠΎ. Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ
substitutions: {
'-first_name-': 'Tejas',
'-employee_id-': 'emp123',
},
substitutions: {
'%first_name%': 'Tejas',
'%employee_id%': 'emp123',
},
substitutions: {
'=first_name=': 'Tejas',
'=employee_id'=: 'emp123',
},
@tjstlekr ,
Π― Π΄ΡΠΌΠ°Ρ, Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° HTML, ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ (Π°ΠΌΠΈ) ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
@thinkingserious ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΠΠΠΠΠ« Π±ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ {{name}}. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ SendGrid Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ, ΠΊΡΠ΄Π° ΡΠ±ΡΠΎΡΠΈΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ Π·Π°ΠΌΠ΅Π½Ρ.
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² Π΄Π²ΠΎΠΉΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
? Π― ΠΏΠΎΠΏΡΠΎΠ±ΡΡ, Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π·Π°ΠΌΠ΅Π½Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ ΡΠΈΡΠ΅, Π° Π½Π΅ Ρ Π΄Π²ΠΎΠΉΠ½ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ:
ΠΡΠΈΠ²Π΅Ρ @tetreault ,
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ. setSubstitutionWrappers
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ
, ΠΊΠ°ΠΊ Π²Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
Π― ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΡΡΠΎ ΠΈ @panayi .
Π― ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Π» ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² . Π― ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΎΠ±Π΅ΡΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π° Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Π·Π°ΠΊΠ»ΡΡΠΈΠ» ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΠΌΠ½ΠΎΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΌ ΠΏΠΈΡΡΠΌΠ΅ Π²ΡΠ΅ Π·Π°ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Ρ Π±Π΅Π· Π·Π°ΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ ΠΌΠ½ΠΎΡ.
Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½Π°.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ:
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΡΠΈΠ²Π΅Ρ @nrator!
ΠΡΠ»ΠΈ Π±Ρ Π·Π°ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ ΠΏΡΡΡΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Ρ Π±Ρ Π΄Π²Π°ΠΆΠ΄Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ», ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΠ΅, Π½Π΅ ΠΏΡΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ ΠΆΠ΅ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΡΡΡ, Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠ΄Π° Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ HTML, ΡΡΠΎΠ±Ρ Ρ ΠΌΠΎΠ³ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
ΠΡΠΈΠ²Π΅Ρ @thinkingserious
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π° ΡΡΡΠΎΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΡΡΡ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°, 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
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠΆΠ΅ΠΉΡΠΎΠ½
ΠΡΠΈΠ²Π΅Ρ, Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π΅ ΡΠ»Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ SG, Π²ΡΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΠΏΠΈΡΡΠΌΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ ΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.
ΠΠ²Π° Π΄Π½Ρ Π½Π°Π·Π°Π΄ Ρ ΡΠΎΠ·Π΄Π°Π» ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π» Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅Π» Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠΉ.
ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π― ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π» ΡΡΠ°ΡΡΠΉ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ»
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
Β«@ sendgrid / mailΒ»: Β«6.3.1Β» | Node.js 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 API?
ΠΡΠΈΠ²Π΅Ρ, ΠΏΡΠΎΡΠΈΡΠ°Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @himanshupnt , Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΈ ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π». Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @himanshupnt .
ΠΠΎΠ·ΠΆΠ΅ Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Sendgrid Mail Send with Dynamic Transactional Templates , Ρ ΠΌΠ΅Π½Ρ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ (Π½Π΅ ΡΡΠ°ΡΡΠΉ). Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠΎΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½ 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));
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π·Π°ΠΌΠ΅Π½ΠΈΠ» Β«ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈΒ» Π½Π° Β«dynamic_template_dataΒ» ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» Β«Π²Π½ΡΡΡΠΈΒ» ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ. Π Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊ ΡΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. (Π²Π²Π΅Π΄ΠΈΡΠ΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ ΡΠ΅ΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Π°)
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ.
@nrator ΠΡΠΎ ΡΠΎΠΆΠ΅
Π£ ΠΌΠ΅Π½Ρ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρ ΡΠΎΠΆΠ΅ ΠΎΡΠΊΡΡΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π² ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π² Π½Π°ΡΠ°Π»Π΅). ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ name
ΠΈ city
Π² ΡΠ°Π±Π»ΠΎΠ½, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ @nrator . ΠΠΎ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ <%subject%>
ΠΈ <%body%>
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΉ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΈΡΡΠΌΠΎ. ΠΠ°ΠΊ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ <%body%>
<%subject%>
? @himanshupnt, ΠΊΠ°ΠΊ Π²Ρ ΡΡΠΎ ΡΠ΅ΡΠΈΠ»ΠΈ?
ΠΡΠΈΠ²Π΅Ρ @ pankaja92 , Ρ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠ³ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ <% subject%>. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Β«dynamic_template_dataΒ», ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π·Π°ΠΊΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ Π² {{}} Π²ΠΌΠ΅ΡΡΠΎ <%%> ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ Π΅Π³ΠΎ Π²Π½ΡΡΡΠΈ Β«dynamic_template_dataΒ».
Π― Π½Π°ΡΠ΅Π» ΡΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ sendgrid, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ΅ΠΌΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
@nrator Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ. ΠΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² <% body%> (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅).
ΠΡΡΠ°ΡΠΈ, Π½Π΅ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π½ΠΎ Π΅ΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ? Π― ΠΈΡΡ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΌΠ½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ :)
@ pankaja92 Π― Π½Π΅ ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠ³Π° 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)
Π‘ΡΡΠ»ΠΊΠ°: https://github.com/sendgrid/sendgrid-nodejs/pull/691
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΡΠΎΠΌΡ PR, ΠΊΠΎΠ³Π΄Π° templateId
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ (Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ d-
), substitutions
Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ dynamicTemplateData
ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
ΠΠ½ΠΈ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ. π
Π‘Π»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: # 703
Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ 'ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ' Π½Π° 'dynamic_template_data'
@jseyfert, ΡΠ°Π·Π²Π΅ ΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ dynamic_template_data
?
@aroach ΡΡ ΠΏΡΠ°Π². Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΡΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΈ Ρ ΠΌΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ.
Π― Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΌΠΎΡ Π²Π΅ΡΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ΅Π»Π° (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» @ 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 Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ dynamic_template_data.
ΠΠΎ Π²ΡΠΎΡΠ½ΠΈΠΊ, 11 Π΄Π΅ΠΊΠ°Π±ΡΡ 2018 Π³., Π² 4:15 Π ΠΎΠΉ ΠΠΈΠ»Π΄Π΅Ρ [email protected] Π½Π°ΠΏΠΈΡΠ°Π»:
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΈ Ρ ΠΌΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ.
Π― Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ ΠΌΠΎΡ Π²Π΅ΡΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ΅Π»Π° (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»
@ sendgrid / mail @ 6.2.1)
Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΏΠ°ΠΊΠ΅Ρ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ @ sendgrid / [email protected]
const result = await this.sgMail.send ({
ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: [{
ΠΊΠΎΠΌΡ: this._to
}],
dynamicTemplateData: {
test: 'test' <== ΡΠ°Π±ΠΎΡΠ°Π΅Ρ (ΠΊΠΎΠ΄ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅: {{test}})
},
templateId: this._templateId,
});-
ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°Ρ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ.
ΠΡΠ²Π΅ΡΡΡΠ΅ Π½Π° ΡΡΠΎ ΠΏΠΈΡΡΠΌΠΎ Π½Π°ΠΏΡΡΠΌΡΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/sendgrid/sendgrid-nodejs/issues/676#issuecomment-446166152 ,
ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ
https://github.com/notifications/unsubscribe-auth/ACL-sjFRFP8txUETNWFVLs0chW5yyL1Nks5u35OzgaJpZM4TOB5l
.
ΠΡΠΈΠ²Π΅Ρ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉ
Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΈ Π΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ.
ΡΠΎΠ³Π΄Π° Π²ΡΠ΅ Π²Π°ΡΠΈ ΡΠ°Π³ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
dynamicTemplateData
Π Π°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΠΌΠ΅Π½Ρ. Π£ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SendGrid, ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΅Π΅ ΡΠ΅ΡΠ΅Π· Firebase (Π€ΡΠ½ΠΊΡΠΈΠΈ). ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΠΉΡΠ°Ρ - ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ TypeScript ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
@roymilder , Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π°ΠΌ ΡΠΏΠ°ΡΠΈΠ±ΠΎ. ΠΠ°Ρ ΠΎΡΠ²Π΅Ρ ΡΠ΄Π΅Π»Π°Π» ΠΌΠ΅Π½Ρ ΡΡΠ°ΡΡΠ»ΠΈΠ²ΡΠΌ - Π·Π°ΠΌΠ΅Π½Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½Ρ.
ΠΡΠ΅ΡΡΠΈΠΆΠ½ΠΎΡΡΡ!
ΠΡΠΈΠ²Π΅Ρ @OleksiiM!
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ?
@ darren-dev,
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ! Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ TypeScript ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π² Π²ΠΈΠ΄Ρ ΡΡΠΎΡΠΎΠ½Ρ Firebase?
@uups ,
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
@thinkingserious , Π΄Π°, ΡΡΠΎ ΡΠ°ΠΊ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ.
@OleksiiM ,
ΠΡΠ΄Π° Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ? Π― ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π»ΡΠ΄ΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΡ Ρ Π²Π°ΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΡΠΏΡΠ°Π²ΠΈΠ».
@thinkingserious
ΠΠ°ΡΠ°Π»ΠΎΡΡ Π·Π΄Π΅ΡΡ .
ΠΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ:
"ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠ΅Ρ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ SMTP Relay
ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ templates ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎΡΡΡ Web API v3
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° x-smtpapi Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎΡΡΡ Web API v2 "
ΠΠΎΡΡΠΎΠΌΡ Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅Π» ΠΊ Β«ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π° Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎΡΡΡ Web API v3 Β».
ΠΠΎΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ:
ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Β«ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅Π»Π° Π·Π°ΠΏΡΠΎΡΠ°Β», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ template_id, Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΠΏΠΎΠ»Π΅ Β«dynamic_template_dataΒ». Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈΒ» + Β«ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈΒ» + Β«template_idΒ», ΠΈ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Sendgrid, Ρ Π½Π΅ Π·Π½Π°Π» ΠΎ Β«ΡΡΠ°ΡΡΡ
Β» ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΠΈ Β«Π½ΠΎΠ²ΡΡ
Β» (Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
) ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΠΈ ΡΠ°Π·Π½ΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ (ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ 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)
Π‘ΡΡΠ»ΠΊΠ°: # 691
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΡΠΎΠΌΡ PR, ΠΊΠΎΠ³Π΄Π°
templateId
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ (Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌd-
),substitutions
Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡdynamicTemplateData
ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.ΠΠ½ΠΈ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ. π
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 2 Π΄Π½Π΅ΠΉ Ρ ΡΠ²ΠΈΠ΄Π΅Π» ΡΡΠΎ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΠ» ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΡΠΈΠ²Π΅Ρ @Travotics!
Π‘ ΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π²Ρ Π½Π°ΡΠ°Π»ΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠ»ΠΈ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅? Π― ΠΏΡΡΠ°ΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΎΠΏΡΡ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
ΠΠ»ΠΌΠ΅Ρ
@thinkingserious 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
.
ΠΡΠΈΠ²Π΅Ρ, ΠΏΡΠΎΡΠΈΡΠ°Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @himanshupnt , Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΈ ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π». Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @himanshupnt .
ΠΠΎΠ·ΠΆΠ΅ Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Sendgrid Mail Send with Dynamic Transactional Templates , Ρ ΠΌΠ΅Π½Ρ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ (Π½Π΅ ΡΡΠ°ΡΡΠΉ). Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠΎΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½ 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));
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π·Π°ΠΌΠ΅Π½ΠΈΠ» Β«ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈΒ» Π½Π° Β«dynamic_template_dataΒ» ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» Β«Π²Π½ΡΡΡΠΈΒ» ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ. Π Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊ ΡΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. (Π²Π²Π΅Π΄ΠΈΡΠ΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ ΡΠ΅ΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Π°)
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π° ΡΡΠΎ! Π― ΠΏΠΎΡΡΠ°ΡΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. : /
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ, ΠΏΡΠΎΡΠΈΡΠ°Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @himanshupnt , Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΈ ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π». Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @himanshupnt .
ΠΠΎΠ·ΠΆΠ΅ Ρ Π½Π°ΡΠ΅Π» Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Sendgrid Mail Send with Dynamic Transactional Templates , Ρ ΠΌΠ΅Π½Ρ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ (Π½Π΅ ΡΡΠ°ΡΡΠΉ). Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠΎΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½ HTML, ΠΈ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π·Π°ΠΌΠ΅Π½ΠΈΠ» Β«ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈΒ» Π½Π° Β«dynamic_template_dataΒ» ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» Β«Π²Π½ΡΡΡΠΈΒ» ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ. Π Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊ ΡΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Β«dynamic_template_dataΒ», ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. (Π²Π²Π΅Π΄ΠΈΡΠ΅ {{subject}} Π² ΠΏΠΎΠ»Π΅ ΡΠ΅ΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Π°)
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ.