email

package
v0.24.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2026 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TemplateVariableCode               = "code"
	TemplateVariableOrganizationName   = "organization_name"
	TemplateVariableInviteURL          = "invite_url"
	TemplateVariableInvitationCode     = "invitation_code"
	TemplateVariableRole               = "role"
	TemplateVariableExpiresAt          = "expires_at"
	TemplateVariableUsername           = "username"
	TemplateVariableAuthMethod         = "auth_method"
	TemplateVariableOccurredAt         = "occurred_at"
	TemplateVariableIPAddress          = "ip_address"
	TemplateVariableUserAgent          = "user_agent"
	TemplateVariableOldEmail           = "old_email"
	TemplateVariableNewEmail           = "new_email"
	TemplateVariableAccessChange       = "access_change"
	TemplateVariableMemberEmail        = "member_email"
	TemplateVariablePreviousRole       = "previous_role"
	TemplateVariablePreviousOwnerEmail = "previous_owner_email"
	TemplateVariableNewOwnerEmail      = "new_owner_email"
)
View Source
const DefaultDeliveryWindow = 72 * time.Hour

Variables

View Source
var (
	ErrUnknownTemplate         = errors.New("unknown email template")
	ErrMissingTemplateVariable = errors.New("missing required email template variable")
)
View Source
var (
	ErrEmptyTemplatePart          = errors.New("email template part is empty")
	ErrMalformedTemplate          = errors.New("email template syntax is malformed")
	ErrUnknownTemplateVariable    = errors.New("unknown email template variable")
	ErrMissingTemplatePlaceholder = errors.New("required email template placeholder is missing")
	ErrInvalidTemplateSubject     = errors.New("email template subject contains a line break")
	ErrMissingTemplateUpdater     = errors.New("email template updater is missing")
)
View Source
var ErrMissingEmailRecipient = errors.New("email recipient is missing")

Functions

func Enqueue added in v0.21.0

func Enqueue(
	ctx context.Context,
	store JobCreator,
	toEmail string,
	template domain.EmailTemplate,
	data TemplateData,
	now time.Time,
) error

Enqueue creates a transactional email job using the transaction carried by ctx, when present. Callers should invoke it in the same transaction as the state change described by the email.

func OccurredAt added in v0.21.0

func OccurredAt(now time.Time) string

func PermanentError added in v0.22.0

func PermanentError(reason string, err error) error

func TransientError added in v0.22.0

func TransientError(reason string, err error) error

func ValidateTemplate added in v0.20.0

func ValidateTemplate(key domain.EmailTemplate) error

ValidateTemplate checks whether Core owns the supplied email template type.

func ValueOrUnknown added in v0.21.0

func ValueOrUnknown(value string) string

Types

type DeliveryError added in v0.22.0

type DeliveryError struct {
	Class  FailureClass
	Reason string
	Err    error
}

func (*DeliveryError) Error added in v0.22.0

func (e *DeliveryError) Error() string

func (*DeliveryError) Unwrap added in v0.22.0

func (e *DeliveryError) Unwrap() error

type EffectiveTemplate added in v0.20.0

type EffectiveTemplate struct {
	Definition       TemplateDefinition
	Source           TemplateSource
	Override         *domain.EmailTemplateOverride
	DeliveryDisabled bool
}

EffectiveTemplate combines immutable catalog metadata with an optional persisted customization.

type FailureClass added in v0.22.0

type FailureClass string
const (
	FailureTransient FailureClass = "transient"
	FailurePermanent FailureClass = "permanent"
)

func ClassifyFailure added in v0.22.0

func ClassifyFailure(err error) (FailureClass, string)

type JobCreator added in v0.21.0

type JobCreator interface {
	CreateEmailJob(context.Context, domain.EmailJob) (domain.EmailJob, error)
}

type LoginAlertPayload

type LoginAlertPayload struct {
	V          int       `json:"v"`
	IPAddress  string    `json:"ip_address"`
	LoggedInAt time.Time `json:"logged_in_at"`
	UserAgent  string    `json:"user_agent,omitempty"`
}

type Message

type Message struct {
	Subject string
	Text    string
	HTML    string
}

func RenderBuiltInTemplate added in v0.20.0

func RenderBuiltInTemplate(key domain.EmailTemplate, data TemplateData) (Message, error)

RenderBuiltInTemplate renders the canonical Authara default for a template.

type NoopSender

type NoopSender struct {
	// contains filtered or unexported fields
}

func NewNoopSender

func NewNoopSender(cfg NoopSenderConfig) *NoopSender

func (*NoopSender) Send

func (s *NoopSender) Send(ctx context.Context, _ string, msg Message) error

type NoopSenderConfig

type NoopSenderConfig struct {
	Logger *slog.Logger
}

type OperatorAuditPage added in v0.20.0

type OperatorAuditPage struct {
	Events   []domain.OperatorAuditEvent
	Page     int
	Size     int
	HasNext  bool
	Action   string
	Template domain.EmailTemplate
}

type OperatorAuditQuery added in v0.20.0

type OperatorAuditQuery struct {
	Page     int
	Size     int
	Action   string
	Template domain.EmailTemplate
}

type PreviewTemplateInput added in v0.20.0

type PreviewTemplateInput struct {
	Template        domain.EmailTemplate
	SubjectTemplate string
	TextTemplate    string
	HTMLTemplate    string
}

type SMTPSender

type SMTPSender struct {
	// contains filtered or unexported fields
}

func NewSMTPSender

func NewSMTPSender(
	host string,
	port int,
	username string,
	password string,
	from string,
	useTLS bool,
	timeout time.Duration,
) *SMTPSender

func (*SMTPSender) Send

func (s *SMTPSender) Send(ctx context.Context, to string, msg Message) error

type SaveTemplateOverrideInput added in v0.20.0

type SaveTemplateOverrideInput struct {
	Template         domain.EmailTemplate
	SubjectTemplate  string
	TextTemplate     string
	HTMLTemplate     string
	ExpectedRevision int64
	UpdatedByUserID  uuid.UUID
}

type Sender

type Sender interface {
	Send(ctx context.Context, to string, msg Message) error
}

type Service

type Service struct {
	// contains filtered or unexported fields
}

func NewService

func NewService(sender Sender) *Service

func (*Service) Send

func (s *Service) Send(ctx context.Context, to string, msg Message) error

type TemplateData added in v0.20.0

type TemplateData map[string]string

TemplateData contains the values available while rendering an email.

type TemplateDefinition added in v0.20.0

type TemplateDefinition struct {
	Key         domain.EmailTemplate
	DisplayName string
	Description string

	DefaultSubjectTemplate string
	DefaultTextTemplate    string
	DefaultHTMLTemplate    string

	AvailableVariables       []string
	RequiredSubjectVariables []string
	RequiredBodyVariables    []string
	SampleData               TemplateData
}

TemplateDefinition describes one Core-owned transactional email and its fixed operator-editable contract.

func LookupTemplate added in v0.20.0

func LookupTemplate(key domain.EmailTemplate) (TemplateDefinition, error)

LookupTemplate returns the definition for a Core-owned email template.

func TemplateCatalog added in v0.20.0

func TemplateCatalog() []TemplateDefinition

TemplateCatalog returns all supported email definitions in display order.

type TemplateErrorLocation added in v0.20.0

type TemplateErrorLocation struct {
	Part TemplatePart
	Line int
}

func LocateTemplateError added in v0.20.0

func LocateTemplateError(err error) (TemplateErrorLocation, bool)

type TemplateHistoryPage added in v0.22.0

type TemplateHistoryPage struct {
	Versions []domain.EmailTemplateVersion
	Page     int
	Size     int
	HasNext  bool
}

type TemplateOverrideStore added in v0.20.0

type TemplateOverrideStore interface {
	GetEmailTemplateOverride(context.Context, domain.EmailTemplate) (domain.EmailTemplateOverride, error)
	ListEmailTemplateOverrides(context.Context) ([]domain.EmailTemplateOverride, error)
	ListEmailTemplateDeliverySettings(context.Context) ([]domain.EmailTemplateDeliverySetting, error)
	SetEmailTemplateDeliveryEnabled(context.Context, domain.EmailTemplate, bool, uuid.UUID) (domain.EmailTemplateDeliverySetting, error)
	GetEmailTemplateVersion(context.Context, domain.EmailTemplate, int64) (domain.EmailTemplateVersion, error)
	ListEmailTemplateVersions(context.Context, domain.EmailTemplate) ([]domain.EmailTemplateVersion, error)
	ListEmailTemplateVersionsPage(context.Context, domain.EmailTemplate, int, int) ([]domain.EmailTemplateVersion, error)
	UpsertEmailTemplateOverride(context.Context, domain.EmailTemplateOverride, int64) (domain.EmailTemplateOverride, error)
	DeleteEmailTemplateOverride(context.Context, domain.EmailTemplate, int64, uuid.UUID) error
	ListOperatorAuditEvents(context.Context, store.OperatorAuditEventFilter) ([]domain.OperatorAuditEvent, error)
}

type TemplatePart added in v0.20.0

type TemplatePart string
const (
	TemplatePartSubject TemplatePart = "subject"
	TemplatePartText    TemplatePart = "text"
	TemplatePartHTML    TemplatePart = "html"
)

type TemplateService added in v0.20.0

type TemplateService struct {
	// contains filtered or unexported fields
}

TemplateService resolves, validates, and renders operator-managed template overrides for previews and outgoing email delivery.

func NewTemplateService added in v0.20.0

func NewTemplateService(store TemplateOverrideStore) *TemplateService

func (*TemplateService) DeleteOverride added in v0.20.0

func (s *TemplateService) DeleteOverride(
	ctx context.Context,
	key domain.EmailTemplate,
	expectedRevision int64,
	updatedByUserID uuid.UUID,
) error

func (*TemplateService) Get added in v0.20.0

func (*TemplateService) GetVersion added in v0.20.0

func (*TemplateService) History added in v0.20.0

func (*TemplateService) HistoryPage added in v0.22.0

func (s *TemplateService) HistoryPage(ctx context.Context, key domain.EmailTemplate, page, size int) (TemplateHistoryPage, error)

func (*TemplateService) List added in v0.20.0

func (*TemplateService) ListAuditEvents added in v0.20.0

func (s *TemplateService) ListAuditEvents(ctx context.Context, query OperatorAuditQuery) (OperatorAuditPage, error)

func (*TemplateService) Preview added in v0.20.0

func (*TemplateService) Render added in v0.20.0

func (*TemplateService) SaveOverride added in v0.20.0

func (*TemplateService) SetDeliveryEnabled added in v0.21.0

func (s *TemplateService) SetDeliveryEnabled(
	ctx context.Context,
	key domain.EmailTemplate,
	enabled bool,
	updatedByUserID uuid.UUID,
) error

type TemplateSource added in v0.20.0

type TemplateSource string
const (
	TemplateSourceBuiltIn  TemplateSource = "built_in"
	TemplateSourceOverride TemplateSource = "override"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL