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