Skip to content

Security

Last updated: 2026-04-14

Encryption

  • In transit — TLS 1.3 everywhere. HSTS enforced on emailmate.dev.
  • At rest — AES-256 for all stored data. AWS SES encrypts queued messages, Convex encrypts application data, Vercel encrypts build artifacts.
  • Secrets — API keys, OAuth tokens, and webhook signing secrets are stored hashed or encrypted with per-tenant keys.

Tenant isolation

Every customer gets a dedicated AWS SES configuration set. Sending reputation is isolated — one tenant’s bounces don’t affect another’s delivery. Application-layer row-level scoping ensures a compromised request can only see its own tenant’s data.

API key handling

  • Keys are generated with cryptographically secure randomness (256 bits of entropy).
  • Only a SHA-256 hash is stored at rest. We cannot recover a lost key.
  • The last 4 characters are shown in the dashboard for identification.
  • Keys can be scoped per-agent and revoked instantly.

Audit logging

Every administrative action (member invites, key creation/revocation, domain changes, billing updates, data exports) is logged with actor, timestamp, IP, and user-agent. Logs are retained for 1 year and exportable for customers on paid plans.

Incident response

We follow a documented incident response process: detect → contain → eradicate → recover → notify → post-mortem. Customers affected by a security incident are notified within 72 hours per GDPR Article 33.

Vendors

  • AWS (SES, KMS, CloudWatch)
  • Vercel (hosting, edge, WAF)
  • Convex (database, realtime)
  • Stripe (payments)
  • PostHog (analytics)
  • Sentry (errors)

Compliance roadmap

  • GDPR — current. DPA on request. Subprocessor list published above.
  • CCPA — current. California residents have access/delete rights.
  • SOC 2 Type I — target Q3 2026.
  • SOC 2 Type II — target Q1 2027.
  • HIPAA — not supported. Do not send PHI through EmailMate.
  • ISO 27001 — evaluating based on demand.

Report a vulnerability

Found a security issue? Email security@emailmate.dev. PGP key available on request. We acknowledge within 24 hours and aim to triage within 72. We don’t run a paid bug bounty yet but we publicly credit responsible disclosures and send swag.

Please do

  • Give us reasonable time to fix before public disclosure.
  • Avoid privacy violations and service disruption.
  • Test against your own account.