What problem does it solve? Sending emails in OrangeHRM involves a queue-and-deferred-send architecture that is easy to misuse: emails queued via EmailService are only flushed by a KernelEvents::TERMINATE subscriber, templates must follow strict directory and naming conventions, and SMTP credentials are encrypted at rest. This Skill explains the full mail pipeline so you can add event-triggered notification emails, send immediate one-off emails, and debug delivery failures without guessing. ## Core Features & Use Cases - Event-driven queued email: Dispatch a domain event from a service, catch it in a subscriber, and call EmailService::queueEmailNotifications() so MailerSubscriber sends it after the HTTP response, keeping SMTP latency invisible to users. - Twig email templates with localization: Create per-plugin Mail/templates/<locale>/<emailName>/ directories with Subject.txt.twig and Body.html.twig pairs, with automatic fallback to en_US. - Direct synchronous sending: Use EmailService::sendEmail() for flows where the user waits on the result, such as password resets and the admin Send Test Email button. - Use Case: You need to email admins when a new entity is saved. Follow the end-to-end walkthrough: define an event class, dispatch it from the service, add Twig templates, write a subscriber that queues the notification, and register it in the plugin configuration. ## Quick Start Ask the agent to add an email notification that is queued and sent to admins whenever a specific entity is saved in your OrangeHRM plugin.