Issue #3607367: Notify account-less recipients via a Recipient value object and Email audiences

Follow-up to #3607272 (split out per the squash-merge).

Notifications resolved to Drupal accounts only, so a workflow could never reach an external party without a local user. This adds a Recipient value object so an assignment resolves either an account or an account-less contact, plus two notification-only Email audiences.

  • Recipient (abstract) + AccountRecipient (wraps an account, reads its mail/langcode/contact fields) + ContactRecipient (account-less address). recipients() returns Recipient[] keyed by a stable key (u:<uid> / c:<channel>:<value>) so duplicates dedupe.
  • Account-based assignments wrap accounts via the shared AssignmentBase::accountsToRecipients() helper (no duplicated recipient shape).
  • New Email / Email by variable audiences resolve fixed or variable-held addresses to ContactRecipient; they mint no candidates, so a NotificationOnlyAssignmentInterface marker hides them from the task assignment editor while keeping them available as a notification audience (Notify node).
  • Event, mail channel and To/Cc/Bcc dispositions all key by recipient key and read the address via contact(\"mail\").
  • Config schema for the two Email plugins.

A follow-up (#3607392) will replace the interim marker with an AudienceInterface / AssignmentInterface split.

Merge request reports

Loading