#4838·boto3

[aws.ses] DefaultTags silently ignored in SendBulkTemplatedEmail

Author: rohit-publiveCreated Sep 8, 2026Updated Sep 8, 2026
Labelsbugneeds-triagepotential-regression

Describe the bug

DefaultTags on SES.Client.send_bulk_templated_email has no effect. Tags supplied via DefaultTags, with no ReplacementTags on any BulkEmailDestination entry, do not appear in the mail.tags field of the Send or Delivery events published to the configuration set.

The call reports success and gives no indication the parameter was ignored.

This previously worked. The behaviour changed on or around 27 Aug 2026 with no change to the SDK version or the calling code.

Regression Issue

  • Select this option if this issue appears to be a regression.

Expected Behavior

Tags supplied via DefaultTags are applied to destinations that do not specify ReplacementTags, and appear in mail.tags on the resulting event-destination payloads.

Current Behavior

The call returns HTTP 200 with Status: Success for every destination. The resulting Send and Delivery events contain only SES auto-tags:

ses:configuration-set
ses:from-domain
ses:source-ip
ses:caller-identity
ses:operation
ses:source-tls-version

Every tag supplied via DefaultTags is absent. No error, warning, or partial-failure status is returned.

Tag names and values conform to the documented charset (ASCII letters, digits, underscores, dashes) and length limits.

Reproduction Steps

  1. Create a configuration set with an SNS event destination, with Send and Delivery enabled.
  2. Attach it to a verified sending identity.
  3. Call send_bulk_templated_email with DefaultTags populated and no ReplacementTags on the destination:
python
import boto3

ses = boto3.client("ses", region_name="ap-south-1")

ses.send_bulk_templated_email(
    Source="[email protected]",
    Template="my-template",
    DefaultTemplateData="{}",
    DefaultTags=[
        {"Name": "example_tag", "Value": "example_value"},
    ],
    Destinations=[
        {
            "Destination": {"ToAddresses": ["[email protected]"]},
            "ReplacementTemplateData": "{}",
            # no ReplacementTags
        }
    ],
)
  1. Inspect mail.tags on the resulting Send event — example_tag is absent.
  2. Re-send with ReplacementTags added to the destination entry:
python
        {
            "Destination": {"ToAddresses": ["[email protected]"]},
            "ReplacementTemplateData": "{}",
            "ReplacementTags": [
                {"Name": "example_tag", "Value": "example_value"},
            ],
        }

example_tag is now present in mail.tags.

Possible Solution

The ses:operation auto-tag on these events reads SendTemplatedEmail, not SendBulkTemplatedEmail. This may indicate the bulk call is fanned out into individual templated sends internally, with DefaultTags not carried across that boundary. Confirmation on whether this is expected for bulk sends would help narrow the cause.

The documentation does not state the precedence between DefaultTags and ReplacementTags, or whether either propagates to configuration-set event destinations, so the observed behaviour cannot be predicted from the API reference.

Additional Information/Context

Questions

  1. Did the handling of DefaultTags in SendBulkTemplatedEmail fan-out change on or around 27 Aug 2026?
  2. Is this a regression under repair, or an intentional behaviour change? This determines whether DefaultTags can be relied on going forward.
  3. Is the ses:operation value of SendTemplatedEmail expected for bulk sends, rather than SendBulkTemplatedEmail?

We have a workaround in place and are not blocked. We are requesting an RCA rather than a mitigation.

SDK version used

boto3 1.26

Environment details (OS name and version, etc.)

  • boto3: 1.26 (pinned, unchanged since June 2023 — the behaviour change occurred with no SDK update) - Python: 3.11 - OS: Linux (Docker) - Region: ap-south-1 - API: SES v1 (ses client, not sesv2) - Event destination: SNS, attached via a configuration set set as the identity default