A transport that reaches a relay over HTTP cannot express what it knows through the current seam, so mailkit fits SMTP alone.
Current state: Send(ctx, Message) error hands back no identifier, and Message carries To, Subject and Body. A rate limit, a dead address and a brief outage all collapse into one opaque error. testkit ships a fake and no conformance test, so the contract is a four line doc comment.
Proposal: hand back a best effort provider identifier, separate permanent failure from temporary, carry an idempotency key, and export a conformance suite an outside transport can run.
Trigger: before any second transport is written.
A transport that reaches a relay over HTTP cannot express what it knows through the current seam, so mailkit fits SMTP alone.
Current state:
Send(ctx, Message) errorhands back no identifier, andMessagecarriesTo,SubjectandBody. A rate limit, a dead address and a brief outage all collapse into one opaque error.testkitships a fake and no conformance test, so the contract is a four line doc comment.Proposal: hand back a best effort provider identifier, separate permanent failure from temporary, carry an idempotency key, and export a conformance suite an outside transport can run.
Trigger: before any second transport is written.