API Reference
Complete reference for all EmailValidation model methods.
Static Methods
validateEmail(string $email): ?string
Validates an email address and stores the result in the database.
Parameters:
$email- The email address to validate
Return: null if valid, error message string if invalid
Example:
$errorMessage = EmailValidation::validateEmail('user@example.com');
if ($errorMessage === null) {
echo "Email is valid";
} else {
echo "Email is invalid: " . $errorMessage;
}
bulkValidationStatus(array $emails): array
Checks the status of multiple email addresses against the database.
Parameters:
$emails- Array of email addresses
Return: Array with counts and details
Example:
$emails = ['user1@test.com', 'user2@example.com'];
$result = EmailValidation::bulkValidationStatus($emails);
echo "Valid: " . $result['valid'];
echo "Invalid: " . $result['invalid'];
echo "Unknown: " . $result['not_exists'];
bulkValidationWithCheck(array $emails, bool $validateMissing = false): array
Bulk validation with option to validate missing email addresses.
Parameters:
$emails- Array of email addresses$validateMissing- Whether missing email addresses should be validated
Return: Array with counts and details
Example:
// Check existing status only
$result = EmailValidation::bulkValidationWithCheck($emails, false);
// Check and validate missing emails
$result = EmailValidation::bulkValidationWithCheck($emails, true);
isBlocked(string $email): bool
Checks if an email address is blocked. Blocking applies to that exact address only, never to the rest of its domain.
Parameters:
$email- The email address to check
Return: true if blocked, false otherwise
Example:
if (EmailValidation::isBlocked('spam@blocked.com')) {
echo "Email is blocked";
}
isValid(string $email): bool
Checks if an email address is valid, or if another address on the same domain is.
Parameters:
$email- The email address to check
Return: true if valid, false otherwise
Example:
if (EmailValidation::isValid('user@example.com')) {
echo "Email is valid";
}
markAsValid(string $email): EmailValidation
Marks an email address as valid.
Parameters:
$email- The email address to mark as valid
Return: EmailValidation model instance
Example:
$validation = EmailValidation::markAsValid('user@example.com');
echo "Marked as valid: " . $validation->email;
markAsInvalid(string $email, string $reason, ?string $statusCode = null): EmailValidation
Marks an email address as invalid.
Parameters:
$email- The email address to mark as invalid$reason- Reason for marking as invalid$statusCode- Optional HTTP-like status code
Return: EmailValidation model instance
Example:
$validation = EmailValidation::markAsInvalid(
'bad@example.com',
'Domain does not exist',
'404'
);
markAsBlocked(string $email, string $reason, int|string|null $statusCode = null): EmailValidation
Marks an email address as blocked. Mail to this address is stopped; other addresses on the domain are not affected.
Parameters:
$email- The email address to mark as blocked$reason- Reason for blocking$statusCode- Optional HTTP-like status code
Return: EmailValidation model instance
Example:
$validation = EmailValidation::markAsBlocked(
'spam@blocked.com',
'Spam complaint',
'403'
);
Return Value Structures
Bulk Validation Result
[
'valid' => 2, // Number of valid emails
'invalid' => 1, // Number of invalid/blocked emails
'not_exists' => 1, // Number of emails not in database
'total' => 4, // Total number of emails checked
'details' => [ // Detailed information per email
'user1@example.com' => [
'status' => 'valid',
'reason' => 'All checks passed',
'last_checked_at' => '2025-09-25 08:30:00'
],
'user2@test.com' => [
'status' => 'blocked',
'reason' => 'No valid mail server found for domain',
'last_checked_at' => '2025-09-25 08:29:00'
],
'user3@invalid.domain' => [
'status' => 'not_exists',
'reason' => 'Email address not found in database',
'last_checked_at' => null
]
]
]
Status Values
valid- Email passed all validation checksblocked- Email is blocked (spam, invalid MX, etc.)invalid- Email has format or other issuesnot_exists- Email not found in database
Status Codes
The model uses HTTP-like status codes:
200- Successfully validated400- Invalid format or DNS problems404- Domain not found500- Server/validation error
Model Properties
Fillable Fields
protected $fillable = [
'email',
'domain',
'status',
'reason',
'status_code',
'last_checked_at'
];
Casts
protected $casts = [
'last_checked_at' => 'datetime'
];
Database Schema
Table: email_validations
CREATE TABLE email_validations (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
domain VARCHAR(255) NOT NULL,
status VARCHAR(50) NOT NULL,
reason TEXT,
status_code INT,
last_checked_at TIMESTAMP NULL,
created_at TIMESTAMP NULL,
updated_at TIMESTAMP NULL,
INDEX idx_email (email),
INDEX idx_domain (domain),
INDEX idx_status (status),
INDEX idx_last_checked (last_checked_at)
);
Error Handling
Common Exceptions
try {
$result = EmailValidation::bulkValidationStatus($emails);
} catch (\Exception $e) {
Log::error('Email validation failed: ' . $e->getMessage());
// Fallback to basic validation
$validEmails = array_filter($emails, function($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
});
}
Validation Failures
When validateEmail() returns an error message, the details are automatically stored in the database:
$email = 'test@example.com';
$errorMessage = EmailValidation::validateEmail($email);
if ($errorMessage !== null) {
echo "Validation failed: " . $errorMessage;
// Optional: Get additional details from database
$validation = EmailValidation::where('email', $email)->first();
echo "Status code: " . $validation->status_code;
echo "Last checked: " . $validation->last_checked_at;
}
Performance Notes
Bulk Operations
- Use
bulkValidationStatus()for checking multiple emails - Avoid loops with individual
validateEmail()calls - Results are automatically cached in database
Database Queries
- Bulk methods use single queries for efficiency
- Indexes on email, domain, and status fields
- Consider pagination for very large datasets
Memory Usage
// For large datasets, process in chunks
$emails = [...]; // Large array
$chunks = array_chunk($emails, 100);
foreach ($chunks as $chunk) {
$result = EmailValidation::bulkValidationStatus($chunk);
// Process results...
}
Next Steps
- Examples โ - See real-world implementation examples
- Best Practices โ - Performance and error handling tips
- Basic Usage โ - Getting started guide