ObjectStackObjectStack

Email Template

Email Template protocol schemas

Email Template Metadata Protocol

Declarative template definition consumed by IEmailService.sendTemplate() to render outbound mail. Persisted as rows of sys_email_template so administrators can author/edit/translate templates in Studio without shipping code, and tenants can override the built-in defaults (allowOrgOverride: true in the metadata registry).

Aligned with Salesforce EmailTemplate and ServiceNow sysevent_email_action conventions: a single named template is resolved by (name, locale); subject/body strings carry simple {{path.to.value}} placeholders rendered against a per-send data payload.

Source: packages/spec/src/system/email-template.zod.ts

TypeScript Usage

import { EmailTemplateDefinitionSchema, EmailTemplateDefinitionCategorySchema, EmailTemplateDefinitionVariableSchema } from '@objectstack/spec/system';
import type { EmailTemplateDefinition, EmailTemplateDefinitionCategory, EmailTemplateDefinitionVariable } from '@objectstack/spec/system';

// Validate data
const result = EmailTemplateDefinitionSchema.parse(data);

EmailTemplateDefinition

Properties

PropertyTypeRequiredDescription
namestringTemplate identifier (dotted snake_case)
labelstringDisplay label
categoryEnum<'auth' | 'notification' | 'workflow' | 'marketing' | 'custom'>
localestringBCP-47 locale (e.g. en-US, zh-CN)
subjectstringSubject template
bodyHtmlstringHTML body template
bodyTextstringoptionalPlain-text body template (auto-derived from HTML when omitted)
variables{ name: string; type: Enum<'string' | 'number' | 'boolean' | 'date' | 'url' | 'user' | 'record'>; required: boolean; description?: string }[]
fromOverride{ name?: string; address: string }optional
replyTostringoptional
activeboolean
isSystemboolean
descriptionstringoptional
protection{ lock: Enum<'none' | 'no-overlay' | 'no-delete' | 'full'>; reason: string; docsUrl?: string }optionalPackage author protection block — lock policy for this email template.
_lockEnum<'none' | 'no-overlay' | 'no-delete' | 'full'>optionalItem-level lock — controls overlay & delete (ADR-0010).
_lockReasonstringoptionalHuman-readable reason shown when a write is refused by _lock.
_lockSourceEnum<'artifact' | 'package' | 'env-forced'>optionalLayer that set _lock (artifact | package | env-forced).
_provenanceEnum<'package' | 'org' | 'env-forced'>optionalOrigin of the item (package | org | env-forced).
_packageIdstringoptionalOwning package machine id.
_packageVersionstringoptionalOwning package version.
_lockDocsUrlstringoptionalOptional documentation link surfaced next to _lockReason.

EmailTemplateDefinitionCategory

Allowed Values

  • auth
  • notification
  • workflow
  • marketing
  • custom

EmailTemplateDefinitionVariable

Properties

PropertyTypeRequiredDescription
namestringVariable name as referenced in placeholders (snake_case or dotted path)
typeEnum<'string' | 'number' | 'boolean' | 'date' | 'url' | 'user' | 'record'>
requiredboolean
descriptionstringoptionalAuthor hint shown in Studio

On this page