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
- Configure an SMTP mailer in instance/workspace settings so email notifications can be sent
- Run a Windmill build with the enterprise and parquet features if email notifications are required
- Route failure notifications to Slack/webhooks instead of email, which do not need SMTP
- 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
- Configure SMTP in instance settings before enabling email automations
- Prefer webhook/Slack notifications on community edition
- Feature-detect the email capability instead of assuming it
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
- Agent mode is only available in the EE, ignoring...
- ${what} failed:\n${output}
- No instance found, please add one first
- No local instance profile named ${instanceName}
- No active instance. Run 'wmill instance add' or pass --insta
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/419b961dd8942992.
Report an issue: GitHub.