Skip to main content
Courier integrates with a wide range of email providers. To send an email, the recipient profile must include an email field:
{
  "message": {
    "to": {
      "email": "alice@acme.com"
    },
    "template": "NOTIFICATION_TEMPLATE_ID"
  }
}
When a notification template includes an email channel, Courier selects the configured email provider based on your channel priority and routing rules. If the primary provider fails, Courier automatically fails over to backup providers when configured.

Available Email Providers

ProviderDescription
Amazon SESAWS-hosted sending with IAM role or access key auth
SendGridTwilio SendGrid with template import and delivery tracking
PostmarkTransactional email with MessageStream support
MailgunEmail delivery with webhooks and EU region support
ResendModern email API with tagging and attachments
SMTPGeneric SMTP relay via NodeMailer
MandrillMailchimp Transactional with template import
SparkPostHigh-volume email delivery
MailjetTransactional and marketing email
MailerSendDomain-verified transactional email
AmplyEmail delivery with attachment support
GmailOAuth-based sending for testing and small-scale use
OneSignal EmailEmail via OneSignal’s notification platform

Email Channel Overrides

Overrides let you modify parts of an email at send time from within the Send request payload. They work with both template-based and inline (Elemental) sends, and are applied just before Courier hands the message off to the provider. There are two levels of override:
  • Channel overrides (message.channels.email.override) apply to every email provider configured for the send. Use these when you want to change the subject, from address, HTML body, or add attachments regardless of which provider sends the email.
  • Provider overrides (message.providers.<key>.override) target a single provider and can pass through fields specific to that provider’s API. Each provider page documents its supported override schema.
Channel overrides and provider overrides can be used together. If both set the same field, the provider override takes precedence.
Overrides are applied after the render step in the notification lifecycle. This means the Rendered tab in the Courier logs will not reflect overrides; it shows the pre-override output. To verify the final payload, check the provider request in the Raw tab.

Available Channel Override Fields

The table below is the complete list of fields you can set in message.channels.email.override. All fields are optional; include only the ones you need.
FieldTypeDescription
subjectstringOverrides the email subject line.
fromstringSender address. Accepts a plain email or "Display Name <email>" format.
reply_tostringSets the Reply-To header. Same format as from.
ccstringCC recipients as a comma-separated string (e.g. "a@example.com,b@example.com").
bccstringBCC recipients as a comma-separated string. Courier converts this to an array for providers that require it.
htmlstringReplaces the rendered HTML body entirely.
textstringReplaces the plain-text body.
attachmentsarrayFile attachments. Schema varies by provider; see provider pages for details.
brandobjectOverrides brand settings (logo, colors). Uses the same schema as POST /brands.
trackingobjectControls tracking behavior. Set { "open": false } to disable open tracking.
Here is an example Send request with every channel override field populated:
{
  "message": {
    // ...rest of request
    "channels": {
      "email": {
        "override": {
          "subject": "Your order has shipped",
          "from": "Acme Notifications <noreply@acme.com>",
          "reply_to": "support@acme.com",
          "cc": "manager@acme.com,team-lead@acme.com",
          "bcc": "audit@acme.com,records@acme.com",
          "html": "<html><body><h1>Order #1234 shipped</h1></body></html>",
          "text": "Order #1234 has shipped. Track it at https://acme.com/track/1234",
          "attachments": [
            {
              "filename": "receipt.pdf",
              "contentType": "application/pdf",
              "data": "base64-encoded-content"
            }
          ],
          "brand": {
            "settings": {
              "email": {
                "header": {
                  "barColor": "#674ea7"
                }
              }
            }
          },
          "tracking": {
            "open": false
          }
        }
      }
    }
  }
}

Brand Override

The channels.email.override.brand property uses same schema as the API request payload for the POST /brands endpoint. Brand elements that can be overridden:
  • logo
  • top bar color
  • brand colors
Example:
{
  "message": {
    // ...rest of request
    "channels": {
      "email": {
        "override": {
          "brand": {
            "settings": {
              "email": {
                "header": {
                  "logo": {
                    "image": "https://www.courier.com/logo.png",
                    "href": "https://www.courier.com"
                  },
                  "barColor": "#674ea7"
                }
              }
            }
          }
        }
      }
    }
  }
}

Allowlist for AWS IP Addresses

Some email providers, such as Mailgun, offer additional security to allowlist IP addresses to access their API. Courier is hosted on AWS and does not provide an IP range in the form of an allowlist. As a workaround, users can subscribe to the AmazonIpSpaceChanged topic, and receive notifications about any changes to the AWS IP address ranges. For details, refer to the AWS documentation.