mailsniper / mailsniper-php
Official PHP SDK for the MailSniper Email Verification API
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/mailsniper/mailsniper-php
Requires
- php: ^8.1
- ext-json: *
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.48
- guzzlehttp/guzzle: ^7.8
- php-http/discovery: ^1.19
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
Suggests
- guzzlehttp/guzzle: Recommended PSR-18 HTTP client implementation
README
Get 10,000 Free API Calls - Stop fake signups and disposable emails before they hurt your business. Create your free account →
Official PHP SDK for the MailSniper Email Verification API. Verify email addresses, detect disposable emails, check domain reputation, and manage your API usage with a clean, type-safe interface.
Features
- ✅ PSR-18 HTTP Client - Use any HTTP client you prefer (Guzzle included by default)
- ✅ PSR-12 Compliant - Follows modern PHP coding standards
- ✅ Flexible - Easy to extend and customize
- ✅ Email Verification - Validate email addresses with detailed analysis
- ✅ Quota Management - Track and monitor API usage
- ✅ Error Handling - Specific exceptions for different error types
Requirements
- PHP 8.1 or higher
- A PSR-18 HTTP client (Guzzle recommended and included in dev dependencies)
Installation
Install via Composer:
composer require mailsniper/mailsniper-php
For the recommended HTTP client (Guzzle):
composer require guzzlehttp/guzzle composer require php-http/discovery
Getting Your API Key
To use this SDK, you'll need an API key. Create a free account at mailsniperapp.com to get your API token with 10,000 free API calls included.
Quick Start
Basic Usage with Auto-Discovery
The simplest way to get started is using the create()
factory method, which auto-discovers available HTTP clients:
<?php require 'vendor/autoload.php'; use MailSniper\Client; // Create client with auto-discovery (requires php-http/discovery) $client = Client::create('your_api_key_here'); // Verify an email address $result = $client->verifyEmail('user@example.com'); if ($result->isValid()) { echo "Email is valid!\n"; echo "Is disposable: " . ($result->isDisposable() ? 'Yes' : 'No') . "\n"; echo "Is public provider (Gmail, Yahoo, etc.): " . ($result->isPublicProvider() ? 'Yes' : 'No') . "\n"; echo "Risk score: {$result->getRisk()}\n"; } else { echo "Email is invalid\n"; } // Check your API usage $usage = $client->getUsage(); echo "Used {$usage->getUsed()} of {$usage->getTotal()} requests\n"; echo "Remaining: {$usage->getRemaining()}\n"; if ($usage->isApproachingLimit()) { echo "Warning: You're approaching your quota limit!\n"; }
Manual HTTP Client Configuration
For more control, you can provide your own PSR-18 HTTP client:
<?php use MailSniper\Client; use GuzzleHttp\Client as GuzzleClient; use GuzzleHttp\Psr7\HttpFactory; // Create HTTP client and factories $httpClient = new GuzzleClient([ 'timeout' => 30, 'connect_timeout' => 5, ]); $httpFactory = new HttpFactory(); // Create MailSniper client $client = new Client( apiKey: 'your_api_key_here', httpClient: $httpClient, requestFactory: $httpFactory ); $result = $client->verifyEmail('test@example.com');
Email Verification
Detailed Example
<?php use MailSniper\Client; use MailSniper\Exception\MailSniperException; $client = Client::create('your_api_key_here'); try { $result = $client->verifyEmail('user@example.com'); // Basic information echo "Email: {$result->getEmail()}\n"; echo "User: {$result->getUser()}\n"; echo "Domain: {$result->getDomain()}\n"; // Validation results echo "Valid: " . ($result->isValid() ? 'Yes' : 'No') . "\n"; echo "Disposable: " . ($result->isDisposable() ? 'Yes' : 'No') . "\n"; echo "Public Provider: " . ($result->isPublicProvider() ? 'Yes' : 'No') . "\n"; echo "University: " . ($result->isUniversity() ? 'Yes' : 'No') . "\n"; echo "Spam: " . ($result->isSpam() ? 'Yes' : 'No') . "\n"; // Risk assessment echo "Risk Score: {$result->getRisk()} (0-100)\n"; // DNS information $dns = $result->getDns(); echo "MX Servers: " . implode(', ', $dns->getMxServers()) . "\n"; echo "Has A DNS Record: " . ($dns->hasARootRecord() ? 'Yes' : 'No') . "\n"; // Quota information (if available) if ($quota = $result->getQuota()) { echo "Requests Remaining: {$quota->getRemaining()}\n"; } } catch (MailSniperException $e) { echo "Error: {$e->getMessage()}\n"; }
Risk Score Interpretation
- 0-20: Low risk - Generally safe email addresses
- 21-50: Medium risk - May require additional verification
- 51-80: High risk - Proceed with caution
- 81-100: Very high risk - Disposable, spam, or invalid domains
Usage Information
Track your API quota consumption:
<?php use MailSniper\Client; $client = Client::create('your_api_key_here'); $usage = $client->getUsage(); echo "Total Quota: {$usage->getTotal()}\n"; echo "Used: {$usage->getUsed()}\n"; echo "Remaining: {$usage->getRemaining()}\n"; echo "Percentage Used: {$usage->getPercentageUsed()}%\n"; if ($usage->isApproachingLimit()) { // Alert when >= 80% quota is used echo "⚠️ Warning: Approaching quota limit!\n"; }
Error Handling
The SDK provides specific exception types for different error scenarios:
<?php use MailSniper\Client; use MailSniper\Exception\AuthenticationException; use MailSniper\Exception\ValidationException; use MailSniper\Exception\QuotaExceededException; use MailSniper\Exception\ServerException; use MailSniper\Exception\MailSniperException; $client = Client::create('your_api_key_here'); try { $result = $client->verifyEmail('test@example.com'); } catch (AuthenticationException $e) { // 401 - Invalid or missing API key echo "Authentication failed: {$e->getMessage()}\n"; echo "Error code: {$e->getErrorCode()}\n"; } catch (ValidationException $e) { // 400 - Invalid email format or parameters echo "Validation error: {$e->getMessage()}\n"; } catch (QuotaExceededException $e) { // 429 - API quota exceeded echo "Quota exceeded: {$e->getMessage()}\n"; echo "Please upgrade your plan or purchase additional requests.\n"; } catch (ServerException $e) { // 5xx - Server errors echo "Server error: {$e->getMessage()}\n"; echo "Status code: {$e->getStatusCode()}\n"; } catch (MailSniperException $e) { // Other errors echo "Error: {$e->getMessage()}\n"; }
API Reference
Client
Constructor
public function __construct( string $apiKey, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, string $baseUrl = 'https://api.mailsniperapp.com' )
Factory Method
public static function create( string $apiKey, string $baseUrl = 'https://api.mailsniperapp.com' ): self
Development
Running Tests
composer test
Code Quality
Run PHPStan (Level 7):
composer phpstan
Run PHP-CS-Fixer (PSR-12):
composer cs-fix
Check code style without fixing:
composer cs-check
Run all quality checks:
composer quality
Configuration
Custom Base URL
For testing or development environments:
$client = Client::create( 'your_api_key_here', 'http://api.localhost' // Custom base URL );
Using a Different HTTP Client
Any PSR-18 compliant HTTP client can be used:
use MailSniper\Client; use Symfony\Component\HttpClient\Psr18Client; use Nyholm\Psr7\Factory\Psr17Factory; $psr17Factory = new Psr17Factory(); $httpClient = new Psr18Client(); $client = new Client( 'your_api_key_here', $httpClient, $psr17Factory // Request factory );
Rate Limits & Quotas
MailSniper uses a fixed quota system rather than time-based rate limiting:
- Each successful API call consumes 1 request from your quota
- Failed requests (4xx, 5xx errors) do not consume quota
- Authentication failures do not consume quota
- Default quota for new signups: 10,000 requests
- Monitor quota using the
getUsage()
method or response headers
Support
- Documentation: https://mailsniperapp.com/docs
- Email: hello@mailsniperapp.com
- Issues: https://github.com/mailsniper/mailsniper-php/issues
License
This SDK is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run quality checks (
composer quality
) - Submit a pull request
Changelog
1.0.0 (Initial Release)
- Email verification endpoint
- Usage information endpoint
- PSR-18 HTTP client support
- Comprehensive error handling