Skip to content

API Reference

Complete API documentation for @mailtester/core.

Functions

validate()

Validates a single email address.

typescript
import { validate } from '@mailtester/core';

const result = await validate(email, options?);

Parameters:

ParameterTypeRequiredDescription
emailstringYesEmail address to validate
optionsConfigNoValidation configuration

Returns: Promise<ValidationResult>

Example:

typescript
// Basic usage
const result = await validate('user@gmail.com');

// With options
const result = await validate('user@gmail.com', {
  preset: 'balanced',
  earlyExit: true
});

validateBulk()

Validates multiple email addresses concurrently.

typescript
import { validateBulk } from '@mailtester/core';

const result = await validateBulk(emails, options?);

Parameters:

ParameterTypeRequiredDescription
emailsstring[]YesArray of email addresses
optionsBulkValidationOptionsNoBulk validation options

Bulk Options:

OptionTypeDefaultDescription
concurrencynumber10Max concurrent validations
continueOnErrorbooleantrueContinue if individual validation fails
onProgressfunctionProgress callback (completed, total) => void
configConfigValidation config for all emails
rateLimitobjectRate limiting configuration

Returns: Promise<BulkValidationResult>

Example:

typescript
const result = await validateBulk(emails, {
  concurrency: 20,
  config: { preset: 'balanced' },
  onProgress: (completed, total) => {
    console.log(`${completed}/${total}`);
  }
});

createValidator()

Creates a reusable validator instance with custom configuration.

typescript
import { createValidator } from '@mailtester/core';

const validator = createValidator(config?);

Parameters:

ParameterTypeRequiredDescription
configConfigNoValidator configuration

Returns: ValidatorInstance

Example:

typescript
// Create once, use many times
const validator = createValidator({
  preset: 'strict',
  earlyExit: true
});

const result1 = await validator.validate('user1@gmail.com');
const result2 = await validator.validate('user2@yahoo.com');

Types

ValidationResult

Result of a single email validation.

typescript
interface ValidationResult {
  valid: boolean;           // Overall validity
  email: string;            // Email that was validated
  score: number;            // Reputation score (0-100)
  reason?: string;          // Which validator failed (if invalid)
  validators: {             // Individual validator results
    regex?: ValidatorResult;
    typo?: ValidatorResult;
    disposable?: ValidatorResult;
    mx?: ValidatorResult;
    smtp?: ValidatorResult;
  };
  metadata?: {
    timestamp?: string;     // ISO 8601 timestamp
    duration?: number;      // Validation duration in ms
  };
}

ValidatorResult

Result from an individual validator.

typescript
interface ValidatorResult {
  valid: boolean;           // Validator passed
  error?: {
    code: string;           // Error code
    message: string;        // Error message
  };
  details?: Record<string, unknown>;  // Additional details
}

BulkValidationResult

Result of bulk email validation.

typescript
interface BulkValidationResult {
  results: ValidationResult[];  // Individual results
  total: number;                // Total emails processed
  valid: number;                // Count of valid emails
  invalid: number;              // Count of invalid emails
  errors: number;               // Count of errors
  duration: number;             // Total duration in ms
}

Config

Validation configuration options.

typescript
interface Config {
  preset?: 'strict' | 'balanced' | 'permissive';
  validators?: {
    regex?: { enabled: boolean };
    typo?: { enabled: boolean };
    disposable?: { enabled: boolean };
    mx?: { enabled: boolean };
    smtp?: { enabled: boolean };
  };
  earlyExit?: boolean;
  timeout?: number;
}

ValidatorInstance

Reusable validator instance.

typescript
interface ValidatorInstance {
  validate(email: string): Promise<ValidationResult>;
  getConfig(): MergedConfig;
}

Configuration Options

Presets

PresetValidatorsEarly ExitUse Case
strictAll enabledYesMaximum validation (default)
balancedSMTP disabledNoFast with good coverage
permissiveRegex onlyYesQuick format check

Individual Options

OptionTypeDefaultDescription
presetstringUse preset: 'strict', 'balanced', 'permissive'
validatorsobjectEnable/disable individual validators
earlyExitbooleantrueStop validation on first failure
timeoutnumberOverall timeout in milliseconds

Rate Limiting

Configure rate limiting for bulk validation:

typescript
await validateBulk(emails, {
  rateLimit: {
    global: {
      requests: 100,  // Max requests
      window: 60      // Per 60 seconds
    },
    perDomain: {
      requests: 10,   // Max per domain
      window: 60      // Per 60 seconds
    }
  }
});

Error Handling

ValidationError

typescript
import { validate, ValidationError } from '@mailtester/core';

try {
  const result = await validate('user@example.com');
} catch (error) {
  if (error instanceof ValidationError) {
    console.log(`Error code: ${error.code}`);
    console.log(`Message: ${error.message}`);
  }
}

Error Codes

CodeDescription
INVALID_INPUTInvalid input provided
INVALID_FORMATEmail format is invalid
DISPOSABLE_EMAILDisposable email detected
NO_MX_RECORDSDomain has no MX records
SMTP_ERRORSMTP verification failed
TIMEOUTOperation timed out
NETWORK_ERRORNetwork error occurred

Released under the MIT License.