From 39d99c5833b69f5eba621b1b2ba31f20cc772ea3 Mon Sep 17 00:00:00 2001 From: Sam Rolfe Date: Wed, 2 Sep 2026 17:53:35 +1000 Subject: [PATCH] Contact form: SMTP_FROM=hello@where-woof.com (SES-ready), add Reply-To --- frontend/internal/handlers/promo.go | 12 ++++++++++-- todo.txt | 12 +++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/internal/handlers/promo.go b/frontend/internal/handlers/promo.go index a34b2e5..dd66074 100644 --- a/frontend/internal/handlers/promo.go +++ b/frontend/internal/handlers/promo.go @@ -72,6 +72,13 @@ func sendContactEmail(name, email, subject, message string) error { if port == "" { port = "587" } + // Sender address on the envelope + From header. Defaults to hello@where-woof.com + // (SES verified identity). For Gmail SMTP this is ignored/overridden by the + // authenticated user, so it stays safe either way. + from := os.Getenv("SMTP_FROM") + if from == "" { + from = "hello@where-woof.com" + } subj := subject if subj == "" { @@ -80,7 +87,8 @@ func sendContactEmail(name, email, subject, message string) error { body := fmt.Sprintf("From: %s <%s>\nSubject: %s\n\n%s", name, email, subj, message) msg := []byte("To: " + to + "\r\n" + - "From: " + user + "\r\n" + + "From: " + from + "\r\n" + + "Reply-To: " + email + "\r\n" + "Subject: " + subj + "\r\n" + "MIME-Version: 1.0\r\n" + "Content-Type: text/plain; charset=utf-8\r\n" + @@ -88,5 +96,5 @@ func sendContactEmail(name, email, subject, message string) error { addr := host + ":" + port auth := smtp.PlainAuth("", user, pass, host) - return smtp.SendMail(addr, auth, user, []string{to}, msg) + return smtp.SendMail(addr, auth, from, []string{to}, msg) } \ No newline at end of file diff --git a/todo.txt b/todo.txt index 18020f3..65b58df 100644 --- a/todo.txt +++ b/todo.txt @@ -14,7 +14,7 @@ x 2026-08-07 (A) Edit this tags details allowed me to edit +project:where-woof x 2026-08-07 (B) Scan-flow: re-alert when different finder phone within 250 m window +project:where-woof +agent:right-monitor-pi-coding x 2026-08-07 (B) Scan-flow: browser fingerprint + 24 h block, store in DB +project:where-woof +agent:right-monitor-pi-coding x 2026-08-07 (B) Preset tag-ID registry: seed real manufactured IDs, enforce registry-only (anti-scam) +project:where-woof +agent:right-monitor-pi-coding -(B) Billing phase (Stripe AU, plans, scan limits, paid-gating) +project:where-woof +agent:where_woof +x 2026-09-01 (B) Billing phase (Stripe AU, plans, scan limits, paid-gating) +project:where-woof +agent:where_woof (C) Photo uploads + object storage (Phase 6 — basic local upload done) +project:where-woof +agent:where_woof (C) Anti-abuse hardening (relay numbers, rate limits — Phase 9) +project:where-woof +agent:where_woof (C) Live SMS creds on .13 service env (uncomment SMS_USER/PASSWORD/FROM in ~/.config/where-woof.env) +project:where-woof +agent:where_woof @@ -26,7 +26,9 @@ x 2026-08-08 2026-08-08 Billing phase + (A) Do we tie this all into an established Open Source inventory payment system - keep qick dash for now? +area:CONCEPT (A) Order-tags. Tie in the inventory system? +area:Where-woof (A) General webiste pages - what is this? Get in touch? About Us. +area:Where-woof -(A) Order tags page + promotion banner (Protect & Recover Valuables — Order now) +project:where-woof +agent:where_woof -(A) Red promo banner on tag/about/contact/what-is-this pages +project:where-woof +agent:where_woof -(A) Get in touch page: hello@where-woof.com + contact form +project:where-woof +agent:where_woof -(C) Verify coordinates in scan/location flow +project:where-woof +agent:where_woof +x 2026-09-01 (A) Order tags page + promotion banner (Protect & Recover Valuables — Order now) +project:where-woof +agent:where_woof +x 2026-09-01 (A) Red promo banner on tag/about/contact/what-is-this pages +project:where-woof +agent:where_woof +x 2026-09-01 (A) Get in touch page: hello@where-woof.com + contact form +project:where-woof +agent:where_woof +x 2026-09-01 (C) Verify coordinates in scan/location flow +project:where-woof +agent:where_woof +(A) Go live: Stripe onboarding + live keys + live payment links +project:where-woof +agent:where_woof +(B) hello@where-woof.com email routing (Cloudflare/SES) +project:where-woof +agent:where_woof