ΠΠ΅Π½Π΅Ρ ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Ρ.Π½. Π€ΡΠ½ΠΊΡΠΈΡΠ° Yandex (ΠΎΡΠΈΡΠΈΡΠ°Π»Π½ΠΎ ΠΈΠΌΠ΅
Π ΡΠ°Ρ ΡΡΠΌ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊ (Π½ΠΎ Π±Π΅Π· ΡΠ°Π½Π°ΡΠΈΠ·Π°ΠΌ) Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΈ, ΠΈ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Ρ Π½Π° Ρ.Π½. Π±Π΅Π· ΡΠ΅ΡΠ²Π΅ΡΠΎΡ (Π±Π΅Π· ΡΠ΅ΡΠ²Π΅Ρ) ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π΅ ΠΌΠΈ ΡΠ΅ Π΄ΠΎΠΏΠ°ΡΠ° (ΠΈ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° Π½Π΅ Π·Π½Π°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π°) Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΈ, Π° ΡΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΏΠ»Π°ΡΠ°ΠΌ Π·Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΊΠΎΠ³Π° ΡΠΈΠ΅ Π½Π΅ ΡΠ΅ Π²ΡΠΈΡΠ°Π½ΠΈ. ΠΡΡΠ³Π° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅. ΠΠ΅ΠΊΠΎΡ Π³ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ° Π±Π΅Π· ΠΌΠ΅Π½Π΅, Π° ΡΠ°Ρ ΠΏΠ»Π°ΡΠ°ΠΌ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ²ΠΈΡΠΈ. ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ 2019 Π³ΠΎΠ΄ΠΈΠ½Π°, Yandex Π³ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΠΈ ΡΠ²ΠΎΡΠΎΡ Π€ΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎΡ Yandex - ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° Π΅ ΠΏΡΠ² Π²ΠΎ Π ΡΡΠΊΠ°ΡΠ° Π€Π΅Π΄Π΅ΡΠ°ΡΠΈΡΠ° Π±Π΅Π· ΡΠ΅ΡΠ²Π΅ΡΠΎΡ. Π ΠΎΠ½Π° ΡΡΠΎ Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ±Π°Π²ΠΎ Π΅ ΡΡΠΎ Π·Π° Π²Π΅ΡΡΠΈΠ½ΠΈΡΠ΅ Π½Π° ΠΠ»ΠΈΡ ΡΠΈΠ΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ ΡΠ»ΠΎΠ±ΠΎΠ΄Π½ΠΈ, ΠΏΠ° ΠΎΡΡΠΎΠ³Π°Ρ ΡΠ΅ Π²ΠΎ ΠΌΠΎΡΠ°ΡΠ° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½Π° Π²ΠΈΠ·ΠΈΡΠ°. ΠΠΎ, Π°ΡΠ΄Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ Π²Π΅ΡΠ΅.
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠΈΡΠ»ΠΈΠΌΠ΅ ΠΎΠ²Π° ΡΡΠ΅Π½Π°ΡΠΈΠΎ. ΠΠ°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π΅ΡΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΠ»ΠΈΡ
ΠΠ° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΎΠ΄ Π€ΡΠ½ΠΊΡΠΈΠΈ Π½Π° Yandex Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΠ±Π»Π°ΠΊ-ΠΎΠ³Π½ΠΎΠΎΡΠΏΠΎΡΠ½ΠΈΡΠ° Π²Π΅ΡΠ΅ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π²ΠΌΠ΅ Π²ΠΎ ΡΠΏΠ°ΡΡΡΠ²ΠΎΡΠΎ
1. ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠ° Π²ΠΎ SendGrid
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌSendGrid Π΅ ΡΠ°ΠΌΠΎ ΠΌΠΎΡΠΎΡ ΠΈΠ·Π±ΠΎΡ, ΠΊΠΎΡ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ² ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΈΡΠΈΠ½ΠΈ, Π° Π³Π»Π°Π²Π½Π°ΡΠ° Π΅ ΡΡΠΎ ΠΈΠΌΠ°Π°Ρ Π³ΠΎΡΠΎΠ² SDK Π·Π° Node.js. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³Π° ΡΡΠ»ΡΠ³Π° Π·Π° ΠΏΠΎΡΡΠ°.
ΠΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅
ΠΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΡΠ΅ΠΊΠΎΡ ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ Node.js:
Π‘Π»Π΅Π΄Π½ΠΎ Π΄ΠΎΠ°ΡΠ°ΠΌΠ΅ ΡΠΎ Π·Π° Π½Π°ΡΠΈΡΠ΅ API-ΠΈΠΌΠ΅ Π½Π° ΠΊΠ»ΡΡΠΎΡ (ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΡΠ°ΠΌΠΎ Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π²ΠΎ ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΈ Π½Π΅ΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π²ΡΡΠΊΠ° ΡΠΎ Π½Π°ΡΠΈΠΎΡ ΠΈΠ΄Π΅Π½ ΠΊΠΎΠ΄; ΡΠ°ΠΌΠΎ ΡΡΠΎ Π΄ΠΎΡΠ΄ΠΎΠ² Π΄ΠΎ Π½Π΅ΠΏΡΠΎΠΏΠ°Π΄Π»ΠΈΠ² Π΄Π΅ΠΌΠΎ-Π°ΠΏΠΈ-ΠΊΠ»ΡΡ) ΠΈ ΠΏΡΠΈΡΠΈΡΠ½Π΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΡΠ΅ΠΈΡΠ°Ρ ΠΊΠ»ΡΡ:
ΠΠ»ΡΡΠΎΡ ΡΠ΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°, ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΈ ΡΠ΅ Π³ΠΎ ΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ Π½Π°ΡΠ΄Π»Π°Π±ΠΎΠΊΠ° Π΄ΠΎΠ²Π΅ΡΠ±Π°. Π ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΅ΠΊΡΠ°Π½ ΡΠΎ ΠΊΠΎΠΏΡΠ΅ ΠΠΎΡΠ²ΡΠ΄Π΅ΡΠ΅ ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°ΡΠ°, ΠΊΠ°ΠΊΠΎ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠ΄ΠΎΠ»Ρ, Π½ΠΎ ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ΠΌΠ° Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌΠ΅, Π½ΠΎ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌΠ΅ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ:
2. ΠΠΈΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ΄
ΠΠΎ, ΡΠ°ΠΌΠΈΠΎΡ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π΅ ΡΠΌΠ΅ΡΠ½ΠΎ ΠΌΠ°Π» - 22 ΡΠ΅Π΄Π°!
ΠΠΎ Π»ΠΈΠ½ΠΈΡΠ° #8 ΠΠΎΡΠ°ΡΠ° Π΅-ΠΏΠΎΡΡΠ° Π΅ Ρ
Π°ΡΠ΄ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π° (ΠΈ Π·Π°ΡΠΎΠ° Π΅ ΡΡΠ°ΠΌΠ΅ΠΆΠ»ΠΈΠ²ΠΎ ΡΠΊΡΠΈΠ΅Π½Π°) - Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΡΠ° Π²Π°ΡΠ°ΡΠ°. ΠΠΎ ΡΠ΅Π°Π»Π½ΠΈΠΎΡ ΠΆΠΈΠ²ΠΎΡ, ΡΠ΅ Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π΅-ΠΌΠ°ΠΈΠ») ΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΡ Π½Π°ΡΡΠ°Π½ΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ ΠΠΠ‘Π’ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠ° Π΄ΠΎ Π½Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠΎ ΠΏΠΎΠ»Π΅ (ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΎΡΡ) Π΅-ΠΌΠ°ΠΈΠ», Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΎΠ²Π° ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ Π²Π°ΠΊΠ°:
const { user } = event;
const email = user.email;
Π Π°ΠΊΠΎ Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π·Π° Π΅ -ΠΏΠΎΡΡΠ° Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ ΠΠΠ’, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ: https://functions.yandexcloud.net/123abc?[email protected]
Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π΅-ΠΌΠ°ΠΈΠ» ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π²Π°ΠΊΠ°:
const email = event.queryStringParameters.email;
ΠΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΡΠΎ ΡΠΎΡΠ½ΠΎ Π΅ ΡΠΎΠ΄ΡΠΆΠ°Π½ΠΎ Π²ΠΎ Π½Π΅ΠΊΠΎΡ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π½Π°ΡΡΠ°Π½ΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΠΎΡ Π€ΡΠ½ΠΊΡΠΈΡΠ° Yandex ΠΈ ΠΈΠ·Π²ΡΡΠΈ Π³ΠΎ ΡΠΎ ΠΏΡΠ°ΡΠ°ΡΠ°:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
ΠΠ²Π° ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ° (Π½ΠΎ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΡΠ°ΡΠ½ΠΎ) Π²ΠΎ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°
ΠΠ½Π°ΡΠΈ, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠ°ΡΠΎΡ), ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ Π½Π΅Π³ΠΎ, ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Π’ΡΠΊΠ° Π΅ ΠΏΠΎΡΡΠ΅Π±Π΅Π½ ΡΠ°ΠΌΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ @sendgrid/mail. ΠΠ»Π°ΡΡΠΈΡΠ½Π° ΠΊΠ΅ΡΠ° Π΅-ΠΏΠΎΡΡΠ°-Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΠ° Π½Π° Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π½Π° Π΅-ΠΏΠΎΡΡΠ° (ΠΊΠ°ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ³ΠΎΠ΄ΠΈΠ² Π²Π΅Π΄Π½Π°Ρ?), Π½ΠΎ Π°ΠΊΠΎ ΡΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π²ΠΎ ΡΠΎΠ° (Π²Π΅ΡΠ΅ Π΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π±Π΅Π· Π½Π°Ρ), Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ (ΠΈ, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ). ΠΠ»Π°ΡΡΠΈΡΠ½Π° ΠΊΠ΅ΡΠ° Π΄ΠΎΡΠ΅Π½Π² Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° ΡΠΈΡΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° .Π.Π‘ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° ΡΡΠ°Π΅ΡΠ΅. ΠΠΎ Π²ΠΎ Π€ΡΠ½ΠΊΡΠΈΠΈ Π½Π° Yandex ΠΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π°Ρ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° Π·Π° ΡΡΠ°Π΅ΡΠ΅. ΠΠ°ΠΊΠΎ? - ΠΠ΅ Π³ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΏΠΎΠ΄ΠΎΠ»Ρ. ΠΠ°ΡΠΎΠ° ΠΏΠ°ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ Π΄ΠΎΡΠ΅Π½Π² ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅, Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .Π.Π‘ - Π½Π΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅, Π° Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ Π΅ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡ.js Π½Π΅ ΠΌΠ΅Π½ΡΠ²Π°Ρ. ΠΠΎ, ΠΎΠ²Π΄Π΅ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π²ΠΌΠ΅ ΠΎΠ²ΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ, ΠΏΠ° ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ.js ΠΈ .Π.Π‘:
touch index.js
touch .env
ΠΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡ.js Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ 22 Π»ΠΈΠ½ΠΈΠΈ ΠΊΠΎΠ΄ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΈ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅ (ΡΠ°ΠΌΠΎ Π²ΠΎ Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° #8 ΡΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ° Π²Π°ΡΠ°ΡΠ° Π΅-ΠΏΠΎΡΡΠ°), ΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° .Π.Π‘ - (Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠΎΠ½ΡΠ΄ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ½ΠΊΡΠΈΡΠ°) ΠΠ°Π²Π΅Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠ΅ΡΠΎ/Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΊΠ»ΡΡΠΎΡ APIΡΡΠΎ Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π° Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° SendGrid:
SENDGRID_API_KEY=ΡΠ²ΠΎΡΠΎΡ-ΠΌΠ½ΠΎΠ³Ρ-ΡΠ°Π΅Π½-sendgrid-api-ΠΊΠ»ΡΡ
Π Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΡΠ°Π±ΠΎΡΠ°, ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ Π³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
ΠΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡ.js, Π²ΠΎ Π»ΠΈΠ½ΠΈΡΠ° #8 ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° Π΅-ΠΏΠΎΡΡΠ°; ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π²ΠΎ root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ .Π.Π‘, ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠ΅ΡΠΎ/Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΊΠ»ΡΡΠΎΡ API, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ Π²Π΅Π΄Π½Π°Ρ ΠΏΠΎΠ³ΠΎΡΠ΅.
3. Π Π°ΡΠΏΠΎΡΠ΅Π΄Π΅ΡΠ΅
ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΡΠ°ΡΠ½ΠΎ ΠΈ Π΄Π΅ΡΠ°Π»Π½ΠΎ Π·Π° Yandex.Cloud ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ°ΠΌΡ Π€ΡΠ½ΠΊΡΠΈΠΈ Π½Π° Yandex ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΠΎ ΠΌΠΎΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡΠ°
ΠΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ zip-Π°ΡΡ ΠΈΠ²Π° (Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΎ Π½Π°ΡΠ΅ΡΠ΅ΠΌΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, mailer.zip), Π²ΠΎ ΠΊΠΎΡ Π³ΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π°ΠΌΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° ΡΠ°Π·ΠΎΠ» ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ .env, index.js - ΡΓ¨ ΠΎΠ΄ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³:
ΠΡΠ°Π²ΠΈΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠΎ ΠΈΠΌΠ΅ΡΠΎ... ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ - ΠΏΠΎΡΡΠ°ΡΠΎΡ, Π²ΠΎ Π»Π΅Π²ΠΎΡΠΎ ΠΌΠ΅Π½ΠΈ Π·Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡΠ° Π²Π»Π΅Π³ΡΠ²Π°ΠΌΠ΅ Π£ΡΠ΅Π΄ΡΠ²Π°ΡΠΎΡ, ΠΏΠΎΠΏΠΎΠ»Π½Π΅ΡΠ΅ Π³ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠ° ΠΈ ΠΏΡΠ΅ΡΡΠ»Π΅ΡΠ΅ ΡΠ΅ Π½Π° ΡΠ°Π·ΠΈΡΠ΅ΡΠΎ ZIP Π°ΡΡ
ΠΈΠ²Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ ΡΠ° Π½Π°ΡΠ°ΡΠ° Π°ΡΡ
ΠΈΠ²Π° mailer.zip:
Π Π΅Π²Π΅ ΡΠ° ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ°ΡΠ° ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ API ΠΊΠ»ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ²Π΄Π΅, Π½Π°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ .Π.Π‘, ΠΈ Π½Π΅ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π΄ΠΎΡΠ΅Π½Π². ΠΠΎ, Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΡΠ΅ΡΠΎ ΠΎΠ²Π°, ΠΏΠ° Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°. Π’ΠΎΠ° Π΅, Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π΄ΡΠΏΠ»ΠΈΡΠ°!
Π‘Π΅Π³Π° Π²ΠΎ Π³ΠΎΡΠ½ΠΈΠΎΡ Π΄Π΅ΡΠ΅Π½ Π°Π³ΠΎΠ» ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΡΠ΅ΠΈΡΠ°Ρ Π²Π΅ΡΠ·ΠΈΡΠ°ΠΈ ΠΏΠΎΡΠ΅ΠΊΠ°ΡΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΠΠΎΠ³Π° ΡΓ¨ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΎ, Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ ΠΎΠ΄ΠΈΠΌΠ΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ ΠΡΠ΅Π³Π»Π΅Π΄. Π’Π°ΠΌΡ ΡΠ΅ ΡΠ° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΠΌΠ΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° ΡΠ°Π²Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°ΡΠ΅ ΡΠΎ Π½Π΅Π³ΠΎ ΠΎΠ΄ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ²Π΅Ρ.
ΠΠ° Π³Π»Π΅Π΄Π°ΡΠ΅ ΡΠΈΠ½Π°ΡΠ° Π²ΡΡΠΊΠ° ΡΠΏΡΠΎΡΠΈ Π½Π°ΡΠΏΠΈΡΠΎΡ ΠΠΈΠ½ΠΊ Π΄ΠΎ ΠΏΠΎΠ²ΠΈΠΊ? ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π½Π΅Π°. ΠΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈ ΠΏΡΠ°Π·Π΅Π½ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Π½Π° ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠΎΡ... ΠΠΎ ΡΠ΅ΠΊΠ°ΡΡΠ΅ - Π΄ΠΎΠ±ΠΈΠ² Π΅-ΠΏΠΎΡΡΠ°:
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° SendGridΠΈ ΠΏΡΠΈΡΠΈΡΠ½Π΅ΡΠ΅ Π³ΠΎ ΠΊΠΎΠΏΡΠ΅ΡΠΎ ΠΠΎΡΠ²ΡΠ΄Π΅ΡΠ΅ ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°ΡΠ°. Π‘ΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ ΡΓ¨ ΠΏΡΠ΅ΠΊΡ ΡΠ²ΠΎΠΈΡΠ΅ ΠΊΠ°Π½Π°Π»ΠΈ, ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΡΠ΅Π±Π° Π΄Π° Π²ΡΠ°ΡΠΈ Π²Π°ΠΊΠΎΠ² Π΅ΠΊΡΠ°Π½:
Π’ΠΎΠ° Π΅ ΡΠΎΠ°, ΠΌΠΎΠΌΡΠΈ (ΠΈ Π΄Π΅Π²ΠΎΡΠΊΠΈ, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°) - ΡΓ¨ Π΅ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΈ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ! ΠΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ°ΡΠΈΠΈ. ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡ Π΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ° Π²Π°ΠΊΠ²ΠΎ Π½Π΅ΡΡΠΎ, ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ΅ΡΠ΅ ΡΠ΅ Π·Π° Π΄Π° Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅.
4. ΠΠΎΠ½Π°ΡΠΈΠΈ
ΠΠ·Π²ΠΎΡ: www.habr.com