-
-
Notifications
You must be signed in to change notification settings - Fork 7
Releases: productdevbook/unemail
v0.5.0
Assets 2
v0.4.1 — shipped: deliverability, compliance, and ergonomics
First release carrying the full v1.1 scope — 36 issues closed since v0.3.0, 251 tests up from 141, still zero runtime dependencies, still works on Node / Bun / Deno / Cloudflare Workers / the browser.
Install:
npm i unemail # or: pnpm add unemail / bun add unemail
deno add jsr:@productdevbook/unemail⚠️ Breaking
One rename across every driver and webhook import — one sed away.
- import resend from "unemail/drivers/resend" + import resend from "unemail/driver/resend" - import resendWebhook from "unemail/webhooks/resend" + import resendWebhook from "unemail/webhook/resend"
Matches the naming convention used by the sibling libs (ahize, etiket). See MIGRATION.md for the full diff + shell recipe.
🛡️ Compliance & deliverability
The headline of v1.1. Gmail + Yahoo Feb-2024 bulk-sender rules are now a one-liner, and every primitive you need to run a real outbound program ships in-core.
- RFC 8058 one-click List-Unsubscribe — add
unsubscribe: { url, mailto }to any message; headers auto-injected. Framework-agnostic one-click handler + HMAC-signed tokens in `unemail/compliance`. (#57) - DKIM signing in the SMTP driver — RSA-SHA256 and Ed25519-SHA256, pure Web-Crypto, relaxed/relaxed canonicalization. Per-message resolver for multi-tenant. (#58)
- Suppression store (memory + unstorage) with `withSuppression` middleware — bounces / complaints / opt-outs never leave the process. (#59)
- Preferences store (category opt-outs) with `withPreferences` middleware — the Novu/Knock primitive, slim and pluggable. (#84)
- ARC signer (RFC 8617) for forwarders. (#78)
- DMARC aggregate (RUA) parser — gzip-aware, zero-dep XML subset. (#69)
- MTA-STS policy generator + TLS-RPT JSON parser. (#79)
- FBL/ARF parser (RFC 5965). (#80)
📨 Core & drivers
- `msg.template` pass-through across SendGrid, Mailgun, Postmark, Brevo, MailerSend, Loops, Zeptomail — native template variables everywhere. (#60)
- `msg.personalizations` — SendGrid-style per-recipient fan-out; one API call when the driver supports it, automatic loop otherwise. (#63)
- `msg.tracking` / `msg.sandbox` / `msg.metadata` — per-message overrides mapped into each provider. (#66)
- `msg.amp` and `msg.raw` — AMP4Email alt-part and bypass-the-builder raw MIME. (#91)
- `driver.cancel(id)` / `driver.retrieve(id)` — Resend implements; others surface `UNSUPPORTED`. (#65)
- `email.sendBatchStream(messages)` — AsyncIterable that yields one result per message for huge fan-outs. (#89)
- Queue worker honours `msg.scheduledAt` (memory + unstorage). (#61)
- New queue adapters: BullMQ, pg-boss, AWS SQS. (#77)
- Multi-region driver presets — Mailgun EU/US. (#76)
- Typed `Address` primitive (RFC 5322 + SMTPUTF8 validation). (#81)
- Typed `getInstance()` escape hatch documented for native provider APIs. (#67)
- `msg.preheader` is a first-class field.
🛠️ Middleware
- `withOAuth2` + `oauth2Gmail` / `oauth2Microsoft` presets — access-token refresh with caching. (#62)
- `withDedupe` (idempotencyKey / contentHash / recipient+subject). (#82)
- `withRetry` gains `exponential-jitter` / `full-jitter` / `decorrelated-jitter` + dead-letter routing. (#83)
- `withRateLimit` gets `rateLimitPresets` (sendgrid, mailgun, resend, postmark, ses, brevo) + proactive `Retry-After` backoff. (#75)
- `withMetrics` + Prometheus exposition registry. (#86)
- `scrubPii` / `withPiiLogging` — mask / hash / drop for GDPR logging. (#90)
🎨 Rendering
- HTML pipeline (`unemail/render/pipeline`) — composable `withPreheader`, `cidRewrite`, `darkModeHook`, `inlineCss` transforms. (#73, #92)
- Handlebars, Liquid, and i18n renderer adapters. (#87)
- ICS calendar invite builder (`unemail/ics`) — RFC 5545 `VEVENT` with organizer, attendees, alarms, methods REQUEST / PUBLISH / CANCEL / REPLY. (#64)
📡 Inbound & webhooks
- Reply stripper (EN/TR/DE/FR/ES) + thread stitcher over `In-Reply-To` / `References`. (#68)
- SES inbound adapter via SNS, with auto-confirm hook. (#85)
- Standard Webhooks (standardwebhooks.com) reference verifier — <5 kB drop-in replacement for Svix's ~1 MB client. (#71)
- Unified event stream (`unemail/events`) — `send.queued` / `send.attempt` / `send.success` / `send.error` converges with webhook-native `delivered` / `opened` / `clicked` / `bounced` / `complained` / `unsubscribed` into a single `EmailEvent` bus. (#70)
🧪 Testing & DX
- New matchers: `toHaveSentTo`, `toHaveSentWithSubject`, `toHaveSentWithAttachment`, `toHaveSentMatching`. (#74)
- `toEmailSnapshot()` helper — scrubs Message-ID/Date for stable snapshots. (#74)
- `Result` helpers — `isOk` / `isErr` / `unwrap` / `unwrapOr` / `mapOk` / `mapErr` / `tryAsync`. (#88)
- New cover art, full README refresh.
- Idempotent release workflow — reruns cleanly after partial failures.
- `pnpm release` now runs `attw` + `jsr:check --dry-run` before bumpp, so slow-type errors surface locally instead of in CI.
📚 Docs
README, MIGRATION.md, and every `docs/*.md` page refreshed in lockstep. New: `docs/rfcs/001-packaging.md` documents the single-package + sub-paths decision for v1.x.
🙏 Credits
v1.1 shipped end-to-end with Claude Opus 4.7 (1M context). Research, architecture, 251 tests, 36 issues — one sprint.
Full diff: v0.3.0...v0.4.1
Assets 2
v0.3.0
🚀 Features
- Add timeout configuration and improve SMTP authentication error handling - by @unitythemaker in #20 (4b1d6)
View changes on GitHub
Assets 2
v0.2.0
Assets 2
v0.1.1
🐞 Bug Fixes
- smtp: Improve port handling and response parsing; enhance DKIM signing process - by @productdevbook in #9 (1e074)
View changes on GitHub
Assets 2
v0.1.0
🐞 Bug Fixes
- Update import paths and types for provider modules in package.json - by @productdevbook (be650)
- Update type paths for provider modules in package.json - by @productdevbook (ca97c)
- Remove mailcrab provider from exports in package.json - by @productdevbook (6f59b)
View changes on GitHub
Assets 2
v0.0.4
🚀 Features
- Enhance SMTP provider with advanced configuration options - by @productdevbook in #6 (78c82)
View changes on GitHub
Assets 2
v0.0.3
🚀 Features
- Add SMTP provider implementation and example usage - by @productdevbook in #4 (97414)
View changes on GitHub
Assets 2
v0.0.2
🚀 Features
- Add email providers - by @productdevbook in #2 (ab734)
- Add CLI tool for MailCrab setup and update package description and keywords - by @productdevbook (76b7c)
🐞 Bug Fixes
- Update release script to include bumpp for version management - by @productdevbook (af20e)