Skip to content

Latest commit

 

History

History
33 lines (24 loc) · 4.26 KB

File metadata and controls

33 lines (24 loc) · 4.26 KB

SES

Parity grade: A · SDK aws-sdk-go-v2/service/ses@v1.37.4 · last audited 2026-08-10 (a40e7cc1)

Coverage

Metric Value
Operations audited 71 (71 ok)
Feature families 15 (15 ok)
Known gaps 6
Deferred items 1
Resource leaks clean

Known gaps

  • GetSendStatistics Rejects always reports 0 -- unlike Bounces/Complaints (fixed gopherstack-mhnk via the mailbox simulator addresses), Rejects models AWS rejecting a message post-acceptance (e.g. virus-scan rejection) and has no documented deterministic client-side trigger; no content/virus-scanning concept exists anywhere in this backend to hang a real Rejects count off of. Left honestly at 0 (bd: gopherstack-uve, scope narrowed this pass -- see families for what WAS fixed).
  • LimitExceededException never returned — no per-resource count caps modeled (max receipt rules/templates/filters etc.); AWS's actual limits are account-specific/adjustable so any hardcoded threshold would be fabricated, not honest (bd: gopherstack-ssk)
  • MailFromDomainNotVerifiedException never triggers — confirmed still modeled in the real operation's error list for SendEmail/SendRawEmail/SendTemplatedEmail/SendBulkTemplatedEmail (aws-sdk-go-v2/service/ses@v1.37.4/deserializers.go:5199,5450,5574,5698, strings.EqualFold("MailFromDomainNotVerifiedException", errorCode)), but SetIdentityMailFromDomain instantly marks Success with no Pending/Failed/TemporaryFailure window (the real trigger condition per api_op_SetIdentityMailFromDomain.go: "taken when the custom MAIL FROM domain setup is in the Pending, Failed, and TemporaryFailure states") and this backend does no DNS/MX lookups (no pkgs/dns usage in this service) to ever produce one. Consistent with this service's instant-verify convention everywhere else (VerifyEmailIdentity/VerifyDomainIdentity/VerifyDomainDkim all skip the real Pending window too); deliberately not changed in isolation to avoid an inconsistent one-off Pending state (bd: gopherstack-nbp; re-confirmed gopherstack-mhnk, not tractable without either a real DNS-check primitive or a fabricated Pending window)
  • MaxSendRate (per-second) advertised via GetSendQuota but not enforced, only the 24h quota is now enforced -- a fabricated per-second throttle would need sub-second timing state with no test-visible way to exercise it without time.Sleep (banned); the advertised value (1/sec) is already the correct AWS sandbox default, just not yet gated (bd: gopherstack-a6y)
  • SendRawEmailInput.FromArn (cross-account sending-authorization ARN for the raw message's From: header, distinct from SourceArn/ReturnPathArn) is not captured -- confirmed via handler_email_sending.go: handleSendRawEmail never calls vals.Get("FromArn") at all, so the field is present in the parsed form body but never read into SendEmailInput (accepted-then-silently-dropped, not genuinely absent from the wire shape). botocore's ses/2010-12-01 service-2.json models FromArn as a plain string with no format pattern, so real AWS does not appear to client-side-validate its shape either; rejecting a malformed FromArn cannot be cited to a documented behavior. No cross-account identity/policy enforcement exists anywhere in this backend even for SourceArn (PutIdentityPolicy stores policies but nothing evaluates them), so capturing-but-ignoring FromArn would be indistinguishable from today's behavior. Left unimplemented (bd: none filed, tracked here; re-confirmed gopherstack-mhnk).
  • SendTemplatedEmailInput/SendBulkTemplatedEmailInput.TemplateArn (cross-account template reference) is not captured -- same accepted-then-silently-dropped shape as FromArn (handler never reads TemplateArn out of vals), same botocore evidence of no format pattern to validate against, same absence of any cross-account resource model in this backend to act on it. Template remains a required member on both real inputs regardless of TemplateArn. Left unimplemented (bd: none filed, tracked here; re-confirmed gopherstack-mhnk).

Deferred

  • services/sesv2/ — separate REST-JSON service, out of scope this pass per task constraints (bd: gopherstack-029)

More