Add per-reply from-address selector and inbox address badges

- Reply composer shows a From dropdown (hello@ or nate@), defaulting
  to whichever address the inbound email was sent to
- Server validates the chosen address against an allowlist before sending
- Inbox list shows colored address badges: blue for hello@, purple for nate@

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmert
2026-06-30 12:14:34 -04:00
parent edc17b8710
commit fbb9a24f32
2 changed files with 40 additions and 5 deletions
+8 -2
View File
@@ -455,6 +455,7 @@ export function register(app) {
const { id } = req.params
const subject = typeof req.body?.subject === 'string' ? req.body.subject.trim() : ''
const message = typeof req.body?.message === 'string' ? req.body.message.trim() : ''
const requestedFrom = typeof req.body?.fromAddress === 'string' ? req.body.fromAddress.trim() : ''
if (!id || typeof id !== 'string') {
res.status(400).json({ message: 'Invalid submission id.' }); return
@@ -477,7 +478,12 @@ export function register(app) {
const recipientName = splitName(submission.name).firstName || submission.name || 'friend'
const html = buildAdminReplyTemplate({ recipientName, message })
const replyToAddress = getResendReplyToAddress()
const fromAddress = getResendFromAddress()
const defaultFrom = getResendFromAddress() || ADMIN_REPLY_FROM
const ALLOWED_FROM = [
'Verse by Verse with Nate <hello@versebyversewithnate.us>',
'Verse by Verse with Nate <nate@versebyversewithnate.us>',
]
const fromAddress = ALLOWED_FROM.includes(requestedFrom) ? requestedFrom : defaultFrom
const text = `Hi ${recipientName},\n\n${message}\n\nGrace and peace,\nVerse by Verse with Nate\n${replyToAddress}`
const resend = new Resend(process.env.RESEND_API_KEY)
@@ -485,7 +491,7 @@ export function register(app) {
resend,
context: 'admin-contact-reply',
payload: {
from: fromAddress || ADMIN_REPLY_FROM,
from: fromAddress,
to: [submission.email],
subject,
replyTo: replyToAddress,