The Email integration has a custom Routing tab with two delivery modes: Single Message and Message templates. Both modes can use Advanced Event Routing event filters; templates add per-row recipients, subjects, and HTML bodies.
Open SignalPress → Integrations → Email → Routing after activating Email — Integrations Overview.
Routing method
| Mode | Setting value | Tier | Summary |
|---|---|---|---|
| Single Message | standard | Signal filters: Tier 1+ | One recipients list, subject, and built-in HTML layout |
| Message templates | templates | Tier 2 | Conditional template rows evaluated top to bottom |
Both configurations are saved. Only the selected Routing method runs at delivery time.
Message templates require Tier 2 (Pro) — Free vs SignalPress Pro. The UI shows an upgrade callout below Tier 2.
Single Message
Single Message uses the shared routing fields on the Routing tab:
- Recipients (Settings tab) — comma-separated addresses; defaults to the site admin email
- Subject — blank uses the event name; supports template tokens
- Signal filters — environment, level, patterns, sources
- Request rules — Tier 2 only — Request Rules
HTML layout comes from Email Settings (for example Include payload). Global routing runs in SignalPress_Client before Email::capture().
PHP
sp_capture( 'backup_failed', [ 'message' => 'Nightly backup did not complete.', 'level' => 'error', ], [ 'source' => 'backup-worker', 'services' => [ 'email' ], ] );
With Routing Minimum Level set to Error and critical, informational events are filtered with a filtered log row.
Message templates (Tier 2)
When Routing method is Message templates:
- SignalPress skips global routing in the main client for Email.
- Each template row is evaluated with
SignalPress_Routing_Evaluator::template_matches()(event filters + request rules for that row). - Matching rows send email using row-specific recipients, subject, and body HTML (tokenized).
Template row fields
Each row includes:
- Label — admin reference only
- Signal filters — same keys as shared routing (
routing_environment, patterns, etc.) - Request rules — optional Tier 2 rule groups
- Recipients — blank inherits Single Message recipients
- Subject and Message — HTML with template tokens
Match behavior
| Setting | Values | Effect |
|---|---|---|
| template_match_mode | first (default) | Stop after the first matching row |
all | Send one email per matching row |
No-match fallback
template_fallback_single_message (enabled by default) sends the Single Message path when no template matches. Fallback runs Single Message routing evaluation before sending.
Settings Minimum level (separate from Routing)
Email Settings includes Minimum level (minimum_level, default warning). This gate runs inside Email::capture() before template matching or Single Message send.
| Filter | Location | Below threshold |
|---|---|---|
| Routing Minimum Level | Routing tab | filtered log row |
| Minimum level | Settings tab | Silent skip (no log, returns true) |
The same split applies to Slack, Discord, and Microsoft Teams — Per-Service Routing Behavior.
Template tokens
Subject and body fields support tokens rendered by SignalPress_Message_Template_Engine (event name, project, environment, source, properties, and more). Extend tokens with:
signalpress/template_tokenssignalpress/subject_tokens
See Hooks and Filters.
Saving Email routing
Message templates use a visual builder; JSON is stored in message_templates. Routing saves through the standard service routing form or Email’s AJAX routing save handler.
What to read next
- Advanced Event Routing — shared event filter reference
- Request Rules — AND/OR builder details
- Per-Service Routing Behavior — Email vs chat services
- Connection Tests and Delivery Log —
filteredvs silent skips - Your First Connection Test — test Email delivery