Yandex-funksjoner sender e-post

Yandex-funksjoner sender e-post

I dag skal vi lage den såkalte. Yandex funksjon (offisielt navn Yandex Cloud-funksjoner), som samarbeidet med posttjenesten SendGrid vil sende "såpe" til fredelig sovende brukere (bare tuller - jeg vet at vi alle er imot spam).

Jeg er også motstander (men uten fanatisme) av tradisjonelle servere, og tilhenger av såkalte. server (serverløse) løsninger, fordi jeg ikke liker (og jeg vet egentlig ikke hvordan) administrere servere, og enda mer, betale for tiden de ikke er lastet. En annen ting er funksjoner. Noen betjener dem uten meg, og jeg betaler kun for samtaler. I begynnelsen av oktober 2019 presenterte Yandex sin Yandex Cloud-funksjoner - ser ut til å være den første i den russiske føderasjonen server. Og det som er spesielt hyggelig er at for Alices ferdigheter er de generelt frie, så de har vært i mitt perifere syn siden den gang. Men la oss komme i gang allerede.

La oss forestille oss dette scenariet. Søknaden din (for eksempel Alices ferdigheter Husk og glem som forresten også fungerer på Yandex-funksjoner) inviterer brukeren til å kjøpe et digitalt produkt, for eksempel tilleggsalternativer, og brukeren foretar en betaling. Et slags betalingssystem (til forveksling lik Yandex) behandler betalingen og sender den til adressen du oppgir (og vi vil ha en lenke å ringe Yandex-funksjoner) HTTP-en forespørsel som inneholder betalingsdetaljer, som beløp, fullt navn, telefonnummer og e-post til betaleren. Vi ønsker å behandle disse dataene på en eller annen måte, for eksempel: kontrollere beløpet, foreta passende oppføringer i databasen, sende til brukere SMS и Epost med bekreftelse på mottak av betaling og ytterligere instruksjoner. Så deg selv mikrotjeneste.

Om hvordan fra Yandex-funksjoner gjøre oppføringer i databasen Cloud Firestore vi har allerede sett på det i opplæringen Alice husker alt (og i fremtiden, tror jeg, vil vi vurdere et eksempel for en annen database - Yandex-databasen). Om hvordan du sender til brukere SMS og integrere vår applikasjon med Yandex.Money – Vi ordner det i nær fremtid. La oss nå bare forholde oss til å sende brev.

1. Opprett en konto i SendGrid

NoteSendGrid er bare mitt valg, som jeg tok av flere grunner, den viktigste er at de har en ferdig SDK for Node.js. Du kan velge hvilken som helst annen posttjeneste.

La oss gå videre til kontoregistreringssiden og fyll ut registreringsskjemaet der. Så går vi til Dashbord, velg i navigasjonspanelet E-post API -> Integrasjonsveiledning, og på hovedpanelet - Web-API og нажимаем кнопку Velg. Alt er som på bildet:

Yandex-funksjoner sender e-post

I neste trinn velger vi node.js:

Yandex-funksjoner sender e-post

Neste kommer vi med for vår API-nøkkelnavn (vil bare vises i konsollen i listen over nøkler, og har ingenting å gjøre med vår fremtidige kode; jeg kom nettopp opp med en uforgjengelig demo-api-nøkkel) og trykk på knappen Opprett nøkkel:

Yandex-funksjoner sender e-post

Nøkkelen vil bli generert, vi vil kopiere den og oppbevare den i den dypeste tillit. Og vi vil ha en skjerm med en knapp Bekreft integrasjon, som på bildet nedenfor, men vi vil ikke klikke på det ennå, men la oss gå videre til å skrive koden:

Yandex-funksjoner sender e-post

2. Skrive kode

Men selve koden, som du kan se, er latterlig liten - 22 linjer!

Yandex-funksjoner sender e-post

På linje #8 E-posten min er hardkodet (og derfor sjenert skjult) - vennligst angi din. I det virkelige liv vil vi motta alle dataene (inkludert emalje) fra objektet hendelse. For eksempel hvis metoden POST et objekt sendes til vår funksjon bruker med felt (eiendom) emalje, kan verdien av dette feltet fås slik:

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

Og hvis e-postadressen sendes til funksjonen ved hjelp av metoden GET, for eksempel: https://functions.yandexcloud.net/123abc?[email protected]
parameterverdi emalje du kan få det slik:

const email = event.queryStringParameters.email;

For å ta en titt på nøyaktig hva som er inneholdt i et objekt hendelse, kan du lage den enkleste Yandex funksjon og vri det med spørsmål:

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

Dette er omtalt mer detaljert (men mindre tydelig) i den offisielle dokumentasjonen her.

Så lag en prosjektkatalog (for eksempel utsendelser), gå til den, initialiser prosjektet, installer avhengigheter:

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

Her kreves kun pakken @sendgrid/mail. Plastpose e-postvalidator sjekker e-postadressen for gyldighet (hvordan gjettet jeg ikke med en gang?), men hvis vi er sikre på den (den har allerede blitt sjekket lenge uten oss), trenger vi ikke å installere den (og vi trenger selvfølgelig ikke sjekke det i koden). Plastpose dotenv designet for å lese poster fra en fil .og V som kjøretidsvariabler. Men i Yandex-funksjoner Det er mulig å plassere disse variablene direkte inn i kjøretidsmiljøet. Hvordan? - Jeg viser det nedenfor. Derfor pakken dotenv du kan heller ikke installere den og filen .og V - ikke opprett, og samtidig er koden i filen index.js ikke forandre. Men her har vi installert denne pakken, så vi lager filer index.js и .og V:

touch index.js
touch .env

I fil index.js skriv 22 linjer med kode vist i skjermbildet ovenfor (bare i linjen #8 endre e-posten din), og i filen .og V - (uten anførselstegn eller tegnsetting) spesifiser paret - nøkkelnavn/verdi APIsom vi nylig mottok i konsollen SendGrid:
SENDGRID_API_KEY=din-veldig-hemmelige-sendgrid-api-nøkkelen

Og hvis du vil ha mindre arbeid, klon depotet og installer pakkene:

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

I fil index.js, på linje #8 Endre e-post; opprette en fil i rotkatalogen .og V, og angi navnet/verdien til nøkkelen i den API, som vist rett ovenfor.

3. Distribuer

Mer eller mindre tydelig og detaljert om Yandex.Cloud og hvordan du plasserer den der Yandex-funksjoner beskrevet i artikkelen min Alice i landet Bitrix - Jeg sender de uvitende til dette landet, og for alle andre (og de som kom tilbake) - så en liten tegneserie (dvs. en serie bilder og tekst).

Vi skaper zip-arkiv (la oss kalle det, for eksempel, mailer.zip), der vi inkluderer katalogen node_modules og filer .env, index.js - alt fra vår prosjektkatalog:

Yandex-funksjoner sender e-post

Vi lager en funksjon med navnet... riktig - utsendelser, i venstre navigasjonsmeny går vi inn Redaktøren, fyll ut de obligatoriske feltene og bytt til fanen ZIP-arkiv last ned arkivet vårt mailer.zip:

Yandex-funksjoner sender e-post

Og her er det tidligere nevnte alternativet for å laste ned API-nøkkel direkte her, i stedet for å opprette en fil i prosjektet .og V, og ikke installer pakken dotenv. Men vi har allerede gjort alt dette, så jeg viser det bare for informasjon. Det vil si at det ikke er nødvendig å duplisere!

Yandex-funksjoner sender e-post

Klikk nå på knappen i øvre høyre hjørne Opprett versjon, og vent et par sekunder. Når alt er klart, går vi automatisk til seksjonen Gjennomgå. Der vil vi aktivere alternativet offentlig funksjonslik at du kan samhandle med den fra omverdenen.

Yandex-funksjoner sender e-post

Du ser den blå lenken på motsatt side av inskripsjonen Link til samtale? Trykk på det. Et tomt nettleservindu åpnes... Men vent - jeg har mottatt en e-post:

Yandex-funksjoner sender e-post

Nå kan du gå tilbake til konsollen SendGrid, og trykk på knappen Bekreft integrasjon. Systemet vil sjekke alt gjennom sine kanaler, og som et resultat bør det returnere en skjerm som dette:

Yandex-funksjoner sender e-post

Det er det, gutter (og jenter, selvfølgelig) - alt er egentlig veldig enkelt og elegant! Det kommer flere artikler. Hvis noen er interessert i å lese noe slikt, abonner så du ikke går glipp av noe.

4. Donasjoner

Yandex-funksjoner sender e-post

Kilde: www.habr.com

Legg til en kommentar