Tema
/
Interneto svetainių serverio dalies kūrimas GO

El. pašto sąsaja, sujungta

Šeši failai kaip skirtukai: email.goconsole.goresend.goconfig.gohandlers.gomain.go (sąsaja + dvi realizacijos, tada config/struktūra/sujungimas, kurie jas įdiegia). Paskutiniai trys — pakeitimai.

1. internal/email/email.go (naujas) — Message, Sender sąsaja ir New (parinkėjas: "resend" → Resend, bet kas kita → konsolė).

2. internal/email/console.go (naujas) — spausdina apibrėžtą laišką į os.Stdout. Atkreipk dėmesį į mu sync.Mutex (lygiagretūs siuntimai nepersipina) ir sąmoningą pasirinkimą rašyti su fmt.Fprintf, ne slog:

// It writes directly rather than through slog on purpose — slog would escape the
// newlines into \n literals and mangle the box.

3. internal/email/resend.go (naujas) — prod siuntėjas: JSON marshal, POST https://api.resend.com/emails su bearer žetonu. Vienas HTTP kvietimas.

4. internal/config/config.go (modify) — trys laukai: EmailSender (numatyta "console"), ResendAPIKey, EmailFrom. Grynas papildymas.

5. internal/handlers/handlers.go (modify) — Handlers struktūra gauna Mailer email.Sender; New jį ima.

6. cmd/signflow/main.go (modify) — sukurk siuntėją iš konfigūracijos ir paduok jį:

mailer := email.New(cfg.EmailSender, cfg.ResendAPIKey, cfg.EmailFrom, log)
h := handlers.New(cfg, queries, sessions, mailer, log)

Patikrink. go run ./cmd/signflow ir perskaityk pačias pirmas log eilutes:

level=INFO msg="email: using console sender (links print to stdout, no email is sent)"

Ta eilutė — visas pažadas: EMAIL_SENDER nenustatytas, tad gavai konsolės siuntėją — kiekvienas laiškas programoje atsidurs šiame terminale, jokio API rakto niekur. Kol kas niekas nesiunčia (atstatymo apdorotojas — kitas žingsnis), bet vamzdynas įdiegtas ir pats apie save praneša.