Provider Verification
Live, real-network checks are an explicit release gate for v1.0. Each live-* command in
the console app sends a real message through a provider and prints Succeeded, the
provider message id, and details.
The Commands
Run any command from the repository root:
dotnet run --project MailForge.Console -- <command> [args]
| Provider | Command | Arguments | Env vars (fallback) |
|---|---|---|---|
| SMTP | live-smtp |
[host] [port] [to] |
— |
| Resend | live-resend |
[apiKey] [to] |
RESEND_API_KEY |
| Amazon SES | live-ses |
[region] [to] |
AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
| Postmark | live-postmark |
[serverToken] [to] |
POSTMARK_SERVER_TOKEN |
| Mailgun | live-mailgun |
[apiKey] [domain] [to] |
MAILGUN_API_KEY, MAILGUN_DOMAIN |
| Brevo | live-brevo |
[apiKey] [to] |
BREVO_API_KEY |
| ZeptoMail | live-zeptomail |
[sendApiKey] [to] |
ZEPTOMAIL_SEND_API_KEY |
| Azure CS | live-azurecs |
[endpoint] [accessKey] [sender] [to] |
AZURE_COMMUNICATION_ENDPOINT, AZURE_COMMUNICATION_ACCESS_KEY, AZURE_COMMUNICATION_SENDER |
Recipient / sender defaults: LIVE_TO picks the recipient for every command (default
recipient@example.com); LIVE_FROM picks the sender (default sender@example.com). For
production-like runs set both env vars — addresses are the only per-run variable.
Every test message carries: subject, HTML + text bodies, one tag (purpose=live-test),
and one text attachment (note.txt).
Local SMTP (offline)
For the SMTP command without a real server, use smtp4dev:
dotnet run --project MailForge.Console -- live-smtp 127.0.0.1 25 you@example.com
Expect Succeeded: True and a message id. SMTP has no provider-level validation; confirm
delivery by inspecting the smtp4dev web UI.
Release Verification
Live, network-level checks are a v1.0 release gate. Every HTTP provider is already
covered by automated integration tests against a local mock server (full suite green,
174 tests), and the live-* commands above add a real network send against a live
account. Results are captured per release and published in the release notes rather than
surfaced as in-progress status here.
Known Provider Notes
- SMTP: validation is deferred to the server; a rejected recipient reports a delivery failure, not a validation error.
- ZeptoMail / Azure CS: headers and tags are dropped by the provider (see Provider Capabilities).
- Resend: inline images are not supported; mark capabilities accordingly.
- Azure CS: the sender must be verified for the resource, and the access key is Base64-decoded before HMAC signing.
- SES: credentials fall back to the standard AWS credential chain when keys are absent.
Release Checklist
- Full CI green on ubuntu-latest and windows-latest (Debug locally; Release in CI only).
dotnet packbuilds all nine packages; inspect each nupkg for README, LICENSE.docfx metadata+docfx buildsucceed with zero warnings; generated API reflects the frozen surface (no internal members).- All
live-*commands returnSucceededagainst real accounts for the target release candidates; results published in the release notes. - Tag
v1.0.0— the publish workflow pushes packages and the docs site deploys onmain.