Send e-post med Amazon SES og SST
En stor fordel med å bruke SST, er at man kan kombinere ulike komponenter. Her forklarer jeg hvordan du kan bruke Amazon Simple Email Service (SES) til å sende deg e-post.
Konfigurering av SST
Konfigurering av e-post er enkelt med SST. Her er sst.config.ts
igjen:
// <reference path="./.sst/platform/config.d.ts" />
export default $config({
app(input) {
return {
name: 'sst-nextjs-test',
removal: input?.stage === 'production' ? 'retain' : 'remove',
protect: ['production'].includes(input?.stage),
home: 'aws',
}
},
async run() {
const email = sst.aws.Email.get('MyEmail', 'mail@example.com')
new sst.aws.Nextjs('MyWeb', {
domain:
$app.stage === 'production'
? {
name: 'example.com',
redirects: ['www.example.com'],
}
: undefined,
link: [email],
})
},
})
Nå har jeg lagt til linjen:
const email = sst.aws.Email.get('MyEmail', 'mail@example.com')
Jeg bruker Email.get
her fordi jeg allerede har opprettet en konfigurasjon av Amazon SES hos AWS. Du kan også opprette en ny e-postidentitet slik:
const email = new sst.aws.Email('MyEmail', { sender: 'mail@example.com' })
Når du starter med Amazon SES vil du jobbe i sandkassemodus, og hver e-postadresse må bekreftes ved å trykke på verifiseringslenken i e-posten som sendes til adressen. Når du aktiverer produksjonsmodus, kan du konfigurere et domene som avsender, og sende fra en hvilken som helst e-postadresse med dette domenet, såfremt domenet er konfigurert riktig.
Det er også viktig å huske på å linke e-postkomponenten til Next.js-komponenten, dette har jeg gjort med link: [email]
i konfigurasjonsobjektet. Jeg glemte å gjøre det først, og fikk en feilmelding om at jeg ikke hadde tillatelse til å sende e-post. Ved å linke vil SST legge til den nødvendige tillatelsen.
Slik linking fungerer med alle komponentene i SST. Det er et veldig fleksibelt konsept, som kan brukes til å bygge avanserte skytjenester.
Sending av e-post
E-post sender man ved å bruke SDK-en som finnes i npm-pakken @aws-sdk/client-ses
. Her er eksempelkode:
import { SendEmailCommand, SESClient } from '@aws-sdk/client-ses'
const sesClient = new SESClient({
region: 'eu-west-1',
})
export async function sendEmail(message: string, email: string) {
const from = 'mail@example.com'
const to = 'mail@example.com'
const sendEmailCommand = new SendEmailCommand({
Destination: {
ToAddresses: [to],
},
Message: {
Body: {
Text: {
Charset: 'UTF-8',
Data: message,
},
},
Subject: {
Charset: 'UTF-8',
Data: `Message from <${email}>`,
},
},
ReplyToAddresses: [email],
Source: from,
})
try {
await sesClient.send(sendEmailCommand)
} catch (error) {
console.error(error)
}
}
Jeg bruker en lignende funksjon som denne til å sende meg en e-post når noen sender inn kontaktskjemaet.
Hvis du bruker denne koden til noe lignende, må du huske å validere eventuelle inndata som kommer fra klienten. Jeg har for eksempel kode som validerer at e-postadressen som sendes inn, er en ekte e-postadresse. Jeg kan anbefale å bruke pakken deep-email-validator
til å validere e-postadresser.
Konklusjon
Som du ser er det rimelig enkelt å konfigurere SST slik at du har støtte for å sende e-post gjennom Amazon SES. Du kan finne mer informasjon i dokumentasjonen for e-postkomponenten.
Dette lille eksempelet er et godt eksempel på hvordan man kan linke komponenter sammen i SST. Dette er et veldig kraftig verktøy som kan brukes til å bygge avanserte skytjenester med SST.
Håper du hadde nytte av denne artikkelen. Ta gjerne kontakt hvis du har spørsmål eller kommentarer.