windmill-labs/windmill · error

SMTP is not enabled

Error message

SMTP is not enabled

What it means

This endpoint stub (the non-enterprise/non-parquet build of the workspace trigger failure email handler) always rejects requests when SMTP support is compiled out or not configured. Windmill only sends trigger failure email notifications when an SMTP mailer is available, so without it the route logs a warning and returns an error instead of sending mail.

Source

Thrown at backend/windmill-api/src/jobs.rs:2671

        send_email.runnable_path.as_deref(),
        recipients,
        &send_email.error,
    )
    .await?;

    Ok(Json(resp))
}

#[cfg(not(all(feature = "enterprise", feature = "instance_smtp")))]
async fn send_email_with_instance_smtp(
    _authed: ApiAuthed,
    Extension(_db): Extension<DB>,
    Path(_w_id): Path<String>,
    Json(_send_email): Json<SendEmail>,
) -> error::Result<Json<String>> {
    tracing::warn!("SMTP is not enabled, skipping workspace trigger failure email notification",);

    return Err(anyhow::anyhow!("SMTP is not enabled").into());
}

#[cfg(all(feature = "enterprise", feature = "parquet"))]
async fn get_logs_from_store(
    log_offset: i32,
    logs: &str,
    log_file_index: &Option<Vec<String>>,
) -> Option<error::Result<Body>> {
    use futures::StreamExt;
    let stream =
        windmill_object_store::get_logs_from_store(log_offset, logs, log_file_index).await?;
    let header = bytes::Bytes::from(
        r#"to remove ansi colors, use: | sed 's/\x1B\[[0-9;]\{1,\}[A-Za-z]//g'
"#
        .to_string(),
    );
    let prefixed_stream = futures::stream::once(async { Ok(header) }).chain(stream);
    Some(Ok(Body::from_stream(prefixed_stream)))

View on GitHub (pinned to e474e8803c)

Solutions

  1. Configure an SMTP mailer in instance/workspace settings so email notifications can be sent
  2. Run a Windmill build with the enterprise and parquet features if email notifications are required
  3. Route failure notifications to Slack/webhooks instead of email, which do not need SMTP
  4. Suppress the calling automation on this workspace since email delivery is unsupported there

Example fix

// before
curl -X POST $BASE/api/w/$WORKSPACE/jobs/send_email ...
// after
# configure SMTP first, or use a webhook channel:
curl -X POST $SLACK_WEBHOOK -d '{"text":"job failed"}'
Defensive patterns

Strategy: fallback

Validate before calling

// check instance mailer config before calling
const settings = await client.getInstanceSettings();
if (!settings.smtp_configured) {
  console.warn('SMTP disabled: use webhook notification instead');
  return;

Prevention

When it happens

Trigger: POSTing to the workspace trigger failure email notification endpoint on a build without the enterprise+parquet features, or with no SMTP mailer configured for the instance.

Common situations: Self-hosted community-edition Windmill with no SMTP settings; enterprise features disabled at compile time; calling an automation/email webhook expecting mail delivery when mailer setup was skipped.

Understand the failure class

Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/419b961dd8942992. Report an issue: GitHub.