Yandex-funktioner sender mail

Yandex-funktioner sender mail

I dag vil vi skabe den såkaldte. Yandex funktion (officielt navn Yandex Cloud-funktioner), som samarbejdede med posttjenesten SendGrid vil sende "sæbe" til fredeligt sovende brugere (bare for sjov - jeg ved godt, at vi alle er imod spam).

Jeg er også modstander (men uden fanatisme) af traditionelle servere, og tilhænger af de såkaldte. serverless (serverløse) løsninger, fordi jeg ikke kan lide (og jeg ved ikke rigtig, hvordan man) administrerer servere, og i endnu højere grad betale for den tid, hvor de ikke er indlæst. En anden ting er funktioner. Nogen servicerer dem uden mig, og jeg betaler kun for opkald. I begyndelsen af ​​oktober 2019 præsenterede Yandex sin Yandex Cloud-funktioner - synes at være den første i Den Russiske Føderation serverless. Og det, der er særligt rart, er, at for Alices evner er de generelt frie, så de har været i mit perifere syn lige siden. Men lad os komme i gang allerede.

Lad os forestille os dette scenarie. Din ansøgning (f.eks. Alices færdigheder Husk og glem som i øvrigt også virker på Yandex funktioner) inviterer brugeren til at købe et digitalt produkt, for eksempel yderligere muligheder, og brugeren foretager en betaling. En slags betalingssystem (til forveksling ligner Yandex) behandler betalingen og sender den til den adresse, du angiver (og vi vil have et link til at ringe til Yandex funktioner) HTTP-en anmodning, der indeholder betalingsoplysninger, såsom beløb, fulde navn, telefonnummer og e-mail på betaleren. Vi ønsker at behandle disse data på en eller anden måde, for eksempel: kontrollere beløbet, foretage passende indtastninger i databasen, sende til brugere SMS и E-mail med bekræftelse på modtagelse af betaling og yderligere instruktioner. Så dig selv mikroservice.

Om hvordan fra Yandex funktioner foretage indtastninger i databasen Cloud Firestore vi har allerede set på det i selvstudiet Alice husker alt (og i fremtiden, tror jeg, vi vil overveje et eksempel for en anden database - Yandex database). Om hvordan man sender til brugere SMS og integrere vores applikation med Yandex.Money - vi ordner det i den nærmeste fremtid. Lad os nu bare beskæftige os med at sende breve.

1. Opret en konto i SendGrid

BemærkSendGrid er bare mit valg, som jeg har truffet af flere grunde, den vigtigste er, at de har en færdiglavet SDK til Node.js. Du kan vælge enhver anden posttjeneste.

Lad os gå videre til kontoregistreringssiden og udfyld tilmeldingsformularen der. Så går vi til Hovedmenu, vælg i navigationspanelet Email API -> Integrationsvejledning, og på hovedpanelet - Web API og нажимаем кнопку Vælg. Alt er som på billedet:

Yandex-funktioner sender mail

I næste trin vælger vi node.js:

Yandex-funktioner sender mail

Dernæst kommer vi med til vores API-nøglenavn (vil kun blive vist i konsollen på listen over nøgler og har intet at gøre med vores fremtidige kode; jeg kom op med en uforgængelig demo-api-nøgle) og tryk på knappen Opret nøgle:

Yandex-funktioner sender mail

Nøglen vil blive genereret, vi kopierer den og opbevarer den i den dybeste fortrolighed. Og vi vil have en skærm med en knap Bekræft integration, som på billedet nedenfor, men vi vil ikke klikke på det endnu, men lad os gå videre til at skrive koden:

Yandex-funktioner sender mail

2. Skrive kode

Men selve koden er, som du kan se, latterligt lille - 22 linjer!

Yandex-funktioner sender mail

I kø #8 Min e-mail er hårdkodet (og derfor genert skjult) - angiv venligst din. I det virkelige liv vil vi modtage alle data (inklusive e-mail) fra objekt begivenhed. For eksempel hvis metoden POST et objekt sendes til vores funktion bruger med mark (ejendom) e-mail, kan værdien af ​​dette felt fås på denne måde:

const { user } = event;
const email = user.email;

Og hvis e-mailadressen videregives til funktionen ved hjælp af metoden GET, for eksempel: https://functions.yandexcloud.net/123abc?[email protected]
parameterværdi e-mail du kan få det sådan her:

const email = event.queryStringParameters.email;

For at tage et kig på, hvad der præcist er indeholdt i et objekt begivenhed, kan du oprette den enkleste Yandex funktion og drej det med forespørgsler:

module.exports.handler = async function (event) {
  return {
   'statusCode': 200, 
   'body': JSON.stringify(event)
  };
};

Dette er beskrevet mere detaljeret (men mindre tydeligt) i den officielle dokumentation her.

Så opret en projektmappe (f.eks. afsendere), gå til det, initialiser projektet, installer afhængigheder:

mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv

Her kræves kun pakken @sendgrid/mail. Plastikpose e-mail-validator tjekker e-mailadressen for gyldighed (hvordan gættede jeg ikke med det samme?), men hvis vi er sikre på det (det er allerede blevet tjekket i lang tid uden os), behøver vi ikke installere det (og evt. vi behøver selvfølgelig ikke tjekke det i koden). Plastikpose dotenv designet til at læse poster fra en fil .env som køretidsvariable. Men i Yandex funktioner Det er muligt at placere disse variable direkte i runtime-miljøet. Hvordan? - Jeg viser det nedenfor. Derfor pakken dotenv du kan heller ikke installere det, og filen .env - ikke opret, og samtidig er koden i filen index.js ikke skift. Men her har vi installeret denne pakke, så vi opretter filer index.js и .env:

touch index.js
touch .env

I fil index.js skriv 22 linjer kode vist i skærmbilledet ovenfor (kun i linjen #8 ændre din e-mail), og i filen .env - (uden anførselstegn eller tegnsætning) angiv parret - nøglenavn/værdi APIsom vi for nylig modtog i konsollen SendGrid:
SENDGRID_API_KEY=din-meget-hemmelige-sendgrid-api-nøgle

Og hvis du vil have mindre arbejde, så klon depotet og installer pakkerne:

git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i

I fil index.js, i kø #8 ændre e-mail; oprette en fil i rodmappen .env, og heri angives navnet/værdien af ​​nøglen API, som vist lige ovenfor.

3. Implementer

Mere eller mindre klart og detaljeret vedr Yandex.Cloud og hvordan man placerer det der Yandex funktioner beskrevet i min artikel Alice i landet Bitrix - Jeg sender de uvidende til dette land, og for alle andre (og dem, der vendte tilbage) - så en lille tegneserie (dvs. en serie billeder og tekst).

skab zip-arkiv (lad os kalde det f.eks. mailer.zip), hvori vi inkluderer biblioteket node_modules og filer .env, index.js - alt fra vores projektkatalog:

Yandex-funktioner sender mail

Vi opretter en funktion med navnet... korrekt - afsendere, i venstre navigationsmenu kommer vi ind Redaktøren, udfyld de påkrævede felter, og skift til fanen ZIP-arkiv download vores arkiv mailer.zip:

Yandex-funktioner sender mail

Og her er den tidligere nævnte mulighed for at downloade API nøgle direkte her, i stedet for at oprette en fil i projektet .env, og installer ikke pakken dotenv. Men vi har allerede gjort alt dette, så jeg viser det kun til orientering. Det vil sige, der er ingen grund til at duplikere!

Yandex-funktioner sender mail

Klik nu på knappen i øverste højre hjørne Opret version, og vent et par sekunder. Når alt er klar, går vi automatisk til sektionen Anmeldelse. Der vil vi aktivere muligheden offentlig funktionså du kan interagere med det fra omverdenen.

Yandex-funktioner sender mail

Du ser det blå link ud for inskriptionen Link til opkald? Klik på den. Et tomt browservindue åbnes... Men vent - jeg har modtaget en e-mail:

Yandex-funktioner sender mail

Nu kan du vende tilbage til konsollen SendGrid, og tryk på knappen Bekræft integration. Systemet vil tjekke alt gennem dets kanaler, og som et resultat skulle det returnere en skærm som denne:

Yandex-funktioner sender mail

Det er det, fyre (og piger, selvfølgelig) - alt er virkelig meget enkelt og elegant! Der kommer flere artikler. Hvis nogen er interesseret i at læse sådan noget, så tilmeld dig, så du ikke går glip af noget.

4. Donationer

Yandex-funktioner sender mail

Kilde: www.habr.com

Tilføj en kommentar