fix(smtp): use noreply@rmail.online as sender across all modules

Mailcow rejects noreply@rspace.online because the authenticated user
is noreply@rmail.online. Updated all SMTP_FROM and SMTP_USER defaults
to use rmail.online consistently: spaces invites, rSplat notifications,
EncryptID auth emails, and rCart payment receipts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-16 21:00:12 -07:00
parent 315a29a6d7
commit 1f97a2ceba
5 changed files with 10 additions and 10 deletions

View File

@ -216,9 +216,9 @@ services:
- DATABASE_URL=postgres://encryptid:${ENCRYPTID_DB_PASSWORD}@encryptid-db:5432/encryptid
- SMTP_HOST=${SMTP_HOST:-mailcowdockerized-postfix-mailcow-1}
- SMTP_PORT=${SMTP_PORT:-587}
- SMTP_USER=${SMTP_USER:-noreply@rspace.online}
- SMTP_USER=${SMTP_USER:-noreply@rmail.online}
- SMTP_PASS=${SMTP_PASS}
- SMTP_FROM=${SMTP_FROM:-EncryptID <noreply@rspace.online>}
- SMTP_FROM=${SMTP_FROM:-EncryptID <noreply@rmail.online>}
- RECOVERY_URL=${RECOVERY_URL:-https://auth.rspace.online/recover}
- MAILCOW_API_URL=${MAILCOW_API_URL:-http://nginx-mailcow:8080}
- MAILCOW_API_KEY=${MAILCOW_API_KEY:-}

View File

@ -2120,7 +2120,7 @@ async function sendPaymentSuccessEmail(
].join('\n');
await transport.sendMail({
from: 'rSpace <noreply@rspace.online>',
from: process.env.SMTP_FROM || 'rSpace <noreply@rmail.online>',
to: email,
subject: `Payment confirmed \u2014 ${p.amount} ${p.token}`,
html,
@ -2196,7 +2196,7 @@ async function sendPaymentReceivedEmail(
].join('\n');
await transport.sendMail({
from: 'rSpace <noreply@rspace.online>',
from: process.env.SMTP_FROM || 'rSpace <noreply@rmail.online>',
to: email,
subject: `Payment received \u2014 ${p.amount} ${p.token}`,
html,

View File

@ -697,7 +697,7 @@ if (process.env.SMTP_PASS) {
secure: Number(process.env.SMTP_PORT) === 465,
tls: { rejectUnauthorized: false },
auth: {
user: "noreply@rspace.online",
user: process.env.SMTP_USER || "noreply@rmail.online",
pass: process.env.SMTP_PASS,
},
});
@ -709,7 +709,7 @@ async function sendSplatEmail(job: Gen3DJob) {
const title = job.title || "3D Model";
try {
await splatMailTransport.sendMail({
from: process.env.SMTP_FROM || "rSplat <noreply@rspace.online>",
from: process.env.SMTP_FROM || "rSplat <noreply@rmail.online>",
to: SPLAT_NOTIFY_EMAIL,
subject: `Your 3D splat "${title}" is ready — rSplat`,
html: `

View File

@ -2082,7 +2082,7 @@ if (process.env.SMTP_PASS) {
port: Number(process.env.SMTP_PORT) || 587,
secure: Number(process.env.SMTP_PORT) === 465,
auth: {
user: process.env.SMTP_USER || "noreply@rspace.online",
user: process.env.SMTP_USER || "noreply@rmail.online",
pass: process.env.SMTP_PASS,
},
tls: { rejectUnauthorized: false },
@ -2148,7 +2148,7 @@ spaces.post("/:slug/invite", async (c) => {
try {
await inviteTransport.sendMail({
from: process.env.SMTP_FROM || "rSpace <noreply@rspace.online>",
from: process.env.SMTP_FROM || "rSpace <noreply@rmail.online>",
to: body.email,
subject: `You're invited to join "${slug}" on rSpace`,
html: [

View File

@ -153,9 +153,9 @@ const CONFIG = {
host: process.env.SMTP_HOST || 'mail.rmail.online',
port: parseInt(process.env.SMTP_PORT || '587'),
secure: false, // STARTTLS on 587
user: process.env.SMTP_USER || 'noreply@rspace.online',
user: process.env.SMTP_USER || 'noreply@rmail.online',
pass: process.env.SMTP_PASS || '',
from: process.env.SMTP_FROM || 'EncryptID <noreply@rspace.online>',
from: process.env.SMTP_FROM || 'EncryptID <noreply@rmail.online>',
},
recoveryUrl: process.env.RECOVERY_URL || 'https://auth.rspace.online/recover',
adminDIDs: (process.env.ADMIN_DIDS || '').split(',').filter(Boolean),