appsmithorg/appsmith · warning · Error

Failed to send error mail. Admin email(s) not configured, pl

Error message

Failed to send error mail. Admin email(s) not configured, please refer to https://docs.appsmith.com/setup/instance-configuration/disable-user-signup#administrator-emails to configure it.

What it means

The second mail branch in sendBackupErrorToAdmins(): reached only when all six provider vars are truthy but APPSMITH_ADMIN_EMAILS (mailTo) is empty. The SMTP server is configured but there is no recipient list, so the error notification has nowhere to go.

Source

Thrown at app/client/packages/rts/src/ctl/mailer.ts:29

  const mailUser = process.env.APPSMITH_MAIL_USERNAME;
  const mailPass = process.env.APPSMITH_MAIL_PASSWORD;
  const mailTo = process.env.APPSMITH_ADMIN_EMAILS;

  console.log("Sending Error mail to admins.");
  try {
    if (
      !mailEnabled ||
      !mailFrom ||
      !mailHost ||
      !mailPort ||
      !mailUser ||
      !mailPass
    ) {
      throw new Error(
        "Failed to send error mail. Email provider is not configured, please refer to https://docs.appsmith.com/setup/instance-configuration/email to configure it.",
      );
    } else if (!mailTo) {
      throw new Error(
        "Failed to send error mail. Admin email(s) not configured, please refer to https://docs.appsmith.com/setup/instance-configuration/disable-user-signup#administrator-emails to configure it.",
      );
    } else if (!mailEnabled) {
      throw new Error(
        "Mail not sent! APPSMITH_MAIL_ENABLED env val is disabled, please refer to https://docs.appsmith.com/setup/instance-configuration/email to enable it.",
      );
    } else {
      const backupFiles = await utils.listLocalBackupFiles();
      const lastBackupfile = backupFiles.pop();
      const lastBackupTimestamp = lastBackupfile.match(
        /appsmith-backup-(.*)\.tar.gz/,
      )[1];
      const lastBackupPath = Constants.BACKUP_PATH + "/" + lastBackupfile;

      const domainName = process.env.APPSMITH_CUSTOM_DOMAIN;
      const instanceName = process.env.APPSMITH_INSTANCE_NAME;

      let text =

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. Set APPSMITH_ADMIN_EMAILS to a comma-separated list of admin addresses in runtime.env / container env.
  2. Restart the RTS so the value is picked up.
  3. Confirm the var name exactly (APPSMITH_ADMIN_EMAILS, plural) and that addresses are valid.
  4. Optionally manage admin emails via the Appsmith admin settings UI so the same field stays in sync.

Example fix

# before
APPSMITH_MAIL_* fully set
# APPSMITH_ADMIN_EMAILS unset

# after
APPSMITH_ADMIN_EMAILS=ops@example.com,oncall@example.com
Defensive patterns

Strategy: validation

Validate before calling

if (!process.env.APPSMITH_ADMIN_EMAILS) throw new Error('Set APPSMITH_ADMIN_EMAILS to a comma-separated admin list.');

Type guard

const hasAdminEmails = (env: NodeJS.ProcessEnv): boolean => Boolean(env.APPSMITH_ADMIN_EMAILS);

Try / catch

try { await sendBackupErrorToAdmins(err, ts); } catch (e) {
  if (/Admin email\(s\) not configured/i.test(e.message)) { log.warn('No admin recipients; alerting via other channel'); }
  else throw e;
}

Prevention

When it happens

Trigger: SMTP fully configured, but APPSMITH_ADMIN_EMAILS is unset/empty when a backup fails and the RTS attempts to notify administrators.

Common situations: Admin emails never set on a new instance; comma-separated list left empty after removing an admin; var name typo (e.g. APPSMITH_ADMIN_EMAIL singular).

Related errors


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/0b442353e24efbde. Report an issue: GitHub.