# Email verification

![](/assets/verification.svg)

Use verification to reduce bounces, protect sender reputation, and clean recipient lists before high-volume sends.

## Quick links

- [Maintaining sender reputation](/docs/reputation/)
- [Validate addresses](https://www.mailslurp.com/guides/email-verification/)
- [Verify when sending](/docs/emails/#validating-email-recipients)
- [API endpoints](/docs/api/#emailverificationcontroller)

## What verification helps with
- Remove obvious invalid recipients before send.
- Reduce hard bounces and complaint risk.
- Keep suppression and list hygiene workflows accurate.
- Improve signal quality for campaign and transactional delivery monitoring.

## Verify during send (fastest path)
For most transactional flows, enable verification as part of send so invalid recipients are filtered before delivery attempts:

```typescript
// the `validateEmailAddresses` option will verify then filter and remove bad recipients
// you can also configure the method to throw instead with `VALIDATE_ERROR_IF_INVALID`
await mailslurp.sendEmail(inboxId, {
  to: [recipient, bouncedRecipient],
  validateEmailAddresses:
    SendEmailOptionsValidateEmailAddressesEnum.VALIDATE_FILTER_REMOVE_INVALID,
});
```

This approach keeps application logic simple and lowers bounce risk without extra pre-processing jobs.

## Verify during list intake and cleanup
For marketing lists or imported contacts, verify addresses when collected or before batch sends:

```typescript
const mailslurp = new MailSlurp(config);
const res =
  await mailslurp.emailVerificationController.validateEmailAddressList({
    validateEmailAddressListOptions: {
      emailAddressList: ['contact@mailslurp.dev', 'bad@mailslurp.dev'],
    },
  });
expect(res.resultMapEmailAddressIsValid['contact@mailslurp.dev']).toEqual(
  true
);
expect(res.resultMapEmailAddressIsValid['bad@mailslurp.dev']).toEqual(
  false
);
```

Use this mode when you need explicit validation outcomes for reporting, suppression, or manual review.

## Recommended operating model
1. Verify at collection/import time for large lists.
2. Verify again during send for critical transactional workflows.
3. Store invalid/bounced outcomes in suppression tables.
4. Re-check long-lived contacts before major campaigns.

## Common mistakes to avoid
- Treating verification as a permanent guarantee.
- Skipping suppression updates after bounce events.
- Verifying only once and never re-checking stale lists.

## Related docs
- [Reputation](/docs/reputation/)
- [Emails](/docs/emails/)
- [Wait for methods](/docs/wait-for/)
