# @backstage/plugin-notifications-backend-module-email

Adds support for sending Backstage notifications as emails to users.

Supports sending emails using `SMTP`, `SES`, `azure`, `sendmail`, or `stream` (for debugging purposes).

## Customizing email content

The email content can be customized with the `notificationsEmailTemplateExtensionPoint`. When you create
this extension, you can set the custom `NotificationTemplateRenderer` to the module. To modify the contents,
override the `getSubject`, `getHtml` and `getText` methods.

```ts
import { notificationsEmailTemplateExtensionPoint } from '@backstage/plugin-notifications-backend-module-email';
import { Notification } from '@backstage/plugin-notifications-common';

export const notificationsModuleEmailDecorator = createBackendModule({
  pluginId: 'notifications',
  moduleId: 'email.templates',
  register(reg) {
    reg.registerInit({
      deps: {
        emailTemplates: notificationsEmailTemplateExtensionPoint,
      },
      async init({ emailTemplates }) {
        emailTemplates.setTemplateRenderer({
          async getSubject(notification) {
            return `New notification from ${notification.source}`;
          },
          async getText(notification) {
            return notification.content;
          },
          async getHtml(notification) {
            return `<p>${notification.content}</p>`;
          },
        });
      },
    });
  },
});
```

## Example configuration:

```yaml
notifications:
  processors:
    email:
      # Transport config, see options at `config.d.ts`
      transportConfig:
        transport: 'smtp'
        hostname: 'my-smtp-server'
        port: 587
        secure: false
        username: 'my-username'
        password: 'my-password'

      # AWS SES
      # transportConfig:
      #   transport: 'ses'
      #   accessKeyId: 'my-access-key
      #   region: 'us-west-2'

      # Azure Communication Service
      # transportConfig:
      #   transport: 'azure'
      #   endpoint: 'https://my-endpoint.communication.azure.com'
      #   accessKey: 'my-access-key'      Optional: if not provided, Managed Identity will be used

      # sendmail
      # transportConfig:
      #   transport: 'sendmail'
      #   path: '/usr/sbin/sendmail'
      #   newline: 'unix'

      # The email sender address
      sender: 'sender@mycompany.com'
      replyTo: 'no-reply@mycompany.com'
      # Who to send email for broadcast notifications
      broadcastConfig:
        receiver: 'users'
      # Optional SES config
      # sesConfig:
      #   fromArn: 'arn:aws:ses:us-west-2:123456789012:identity/example.com'
      #   configurationSetName: 'custom-config'
      # How many emails to send concurrently, defaults to 2
      concurrencyLimit: 10
      # How much to throttle between emails, defaults to 100ms
      throttleInterval:
        seconds: 60
      # Cache configuration for email addresses
      # This is to prevent unnecessary calls to the catalog
      cache:
        ttl:
          days: 1
      # Notification filter which this processor will handle
      filter:
        # Minimum severity of the notification to send email
        minSeverity: high
        # Maximum severity of the notification to send email
        maxSeverity: critical
        # Topics that are excluded from sending email
        excludedTopics:
          - scaffolder
      # List of allowed email addresses to get notifications via email
      allowlistEmailAddresses:
        - john.doe@backstage.io
      # List of denied email addresses to get notifications via email
      denylistEmailAddresses:
        - jane.doe@backstage.io
```

See `config.d.ts` for more options for configuration.
