Back to BlogQuality & Testing

Email Deliverability and Notification Testing as a Service

Rupak Amin

Founder & Lead Engineer, RAITHub

7 min read

RAITHub ships and tests production software. See QA as a Service or talk to us.

Email deliverability and notification testing as a service is QA for the messages your app sends: a provider checks that sign-up, reset, receipt and alert emails actually send, authenticate, reach the inbox and read correctly. You buy it as a one-off audit, a monthly plan or a dedicated team. It suits teams who learn an email never arrived only when a user cannot verify their account.

If you would rather have it tested for you, see how RAITHub would test this below, or start at the QA as a service overview. One honest line first: deliverability QA tests your sending, authentication and content; it cannot guarantee an inbox placement, because the receiving providers decide that.

Why do sign-up and reset emails land in spam?

Usually one of two reasons, and both are testable. First, the email never authenticates: receiving providers now require it. Gmail requires every sender to authenticate with SPF or DKIM, and bulk senders to set up SPF, DKIM and DMARC (Google sender guidelines). Mail that fails these checks is filtered or rejected. Second, the link inside the email points at localhost or a preview URL because the sending or auth configuration was never changed for production; Supabase's redirect URLs guide shows how the site URL and allow list control where those links go. A user who cannot verify their email never becomes a user, and you never see the error.

Deliverability is three layers: the message sends at all, it authenticates, and it reaches the inbox and reads correctly. Email testing checks each. The acronyms stand for Sender Policy Framework (SPF), DomainKeys Identified Mail (DKIM) and Domain-based Message Authentication, Reporting and Conformance (DMARC) — the three records that tell a receiver your mail is genuine.

What does email and notification testing cover?

LayerWhat it answersHow it is tested
TriggerDoes the right event send the right email, once, to the right address?Integration tests on the sending code
AuthenticationAre SPF, DKIM and DMARC set up and passing for the sending domain?Header and DNS record checks on real sends
PlacementDoes the mail reach the inbox, not spam, across major providers?Seed-inbox sends to real mailboxes
Content and linksDo links point at production, render on mobile, and work for every locale?Rendered-template review; link checks
Edge casesResend, rate limits, bounces, unsubscribe and duplicate sendsFixtures for retries, bounces and opt-out

Notifications beyond email, such as in-app, SMS and push, share the trigger layer: the right event fires the right message, once. The event-and-delivery discipline is the same one behind testing payments and webhooks, where a message sent twice or not at all is the defect that costs you.

How do you test that the right email sends, in code?

Test the trigger with an integration test that captures the send, so a refactor cannot silently stop an email or send it twice. A minimal example:

Free checklist

AI-Built App Launch Readiness Checklist

25 checks before you let real users in. Enter your email and we’ll reveal it below (and send you a copy).

One email, the checklist, no spam. By submitting you agree we can email you this checklist and reply to your enquiry.

// email-trigger.test.ts
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { registerUser } from '../src/auth/register'
import * as mailer from '../src/lib/mailer'

describe('sign-up sends exactly one verification email', () => {
  beforeEach(() => vi.restoreAllMocks())

  it('sends one email to the new address with a production link', async () => {
    const send = vi.spyOn(mailer, 'send').mockResolvedValue({ id: 'test' })

    await registerUser({ email: 'new.user@example.com', password: 'Str0ng-Pass!' })

    expect(send).toHaveBeenCalledTimes(1) // not zero, not twice
    const msg = send.mock.calls[0][0]
    expect(msg.to).toBe('new.user@example.com')
    expect(msg.subject).toMatch(/verify/i)
    // The link must point at production, never localhost or a preview URL.
    expect(msg.html).toMatch(/https:\/\/app\.example\.com\/verify\?token=/)
    expect(msg.html).not.toMatch(/localhost|vercel\.app/)
  })
})

Use example.com for test addresses, which is reserved for exactly this purpose, so a test never mails a real stranger. The trigger test runs in CI on every change; the authentication and placement layers are checked on real sends to seed mailboxes, because only a real send proves SPF, DKIM and DMARC pass end to end.

Buy, build or hire?

RouteWhat it costs on the marketChoose this whenWatch out for
A deliverability or seed-test toolInbox-placement tools are quoted per scope; provider postmaster tools are freeYour team will own and read the deliverability reportsA tool measures placement; it does not fix the trigger code or the content
FreelancersUpwork lists a median of $35 an hour for QA engineers (Upwork QA engineer rates)A short one-off deliverability checkEmail expertise varies; the checks are not repeated on each release
An in-house QA hireThe US median wage for QA analysts and testers was $104,300 in May 2025, before benefits (US Bureau of Labor Statistics)Messaging is central and you can keep the skillDeliverability is a niche most generalist QA hires do not own
A managed email testing serviceQuoted per scope: an audit, a plan or a dedicated teamAccount emails are failing and you have no one testing themAgree access to the sending domain and seed mailboxes

How RAITHub would test this

  • Scope: list the transactional emails and notifications that block a user, and the sending domain.
  • Trigger tests: integration tests that each event sends the right message once, with a production link, gated in CI.
  • Authentication: SPF, DKIM and DMARC checked on real sends, with failures reported against the provider requirements.
  • Placement and content: seed-inbox sends across major providers, plus rendered-template and link review per locale and on mobile.
  • Edge cases: resend, rate limits, bounces, duplicate sends and unsubscribe handled correctly.

Timeline: a one-off audit is fixed in scope and dates before it starts; a plan or dedicated team runs month to month. You receive: a test plan, the trigger tests and CI configuration in your repository, bug reports in your tracker, a handover document, full IP and an NDA. Next step: a free 15-minute audit, then a written fixed quote. The QA proof RAITHub cites is counted test suites plus its own sending experience: TheSkinProof, the founder's own venture, runs transactional email across multiple gateways with 750+ tests, and this website sends its lead email with 400+ tests in CI. There is no email QA case study beyond those counts.

To start, tell RAITHub which emails are failing. For a single deliverability pass, use the one-off audit form.

When don't you need RAITHub for this?

  • Your emails already authenticate and your team runs trigger tests. You may only need a review.
  • You need marketing-list warming or reputation recovery at scale. That is a deliverability consultancy's job; RAITHub tests transactional sending and triggers.
  • You need an email the app does not send yet built. That is development, not testing.
  • You want testers under your own management. RAITHub does not offer staff augmentation.

Frequently asked questions

What is email deliverability testing?

Checking that the messages your app sends actually send, authenticate with SPF, DKIM and DMARC, reach the inbox rather than spam, and read correctly with working links. It also covers the trigger layer: the right event sends the right email once, to the right address.

Why do my app's emails go to spam?

Usually because the sending domain is not authenticated. Gmail requires SPF or DKIM for every sender and SPF, DKIM and DMARC for bulk senders; mail that fails is filtered. The other common cause is a verification link pointing at localhost or a preview URL instead of production.

Can you guarantee my emails reach the inbox?

No, and nor can any honest provider. The receiving mail providers decide placement. Deliverability QA tests your sending, authentication, content and reputation signals so the odds are as good as they can be, and measures placement against seed mailboxes.

Do you test SMS, push and in-app notifications too?

Yes, at the trigger layer: the right event fires the right notification, once, with correct content and links. Email adds the authentication and placement layers that SMS and push do not have.

How do you test emails without spamming real people?

Trigger tests capture the send in code and assert on it without mailing anyone, using reserved test addresses. Authentication and placement are checked on controlled sends to seed mailboxes owned for the purpose, not to real users.

How much does email testing cost?

It depends on the number of emails and notifications and whether placement testing is in scope. Marketplace QA engineers typically charge $20 to $60 an hour. RAITHub publishes no rates and quotes a fixed price after a free audit.

email deliverability testingnotification testingspf dkim dmarctransactional emailqa as a serviceemail qa

Ready to discuss your project?

Book a free 15-minute technical audit with our engineering team.