SMTP_Validate_Email
, (*1)
Perform email address validation/verification via SMTP., (*2)
The SMTPValidateEmail\Validator class retrieves MX records for the email domain and then connects to the
domain's SMTP server to try figuring out if the address really exists., (*3)
Earlier versions (before 1.0) used the SMTP_Validate_Email class name (and did not use namespaces and other now-common PHP features). Care has been taken to keep the old API and migrating old code should be painless. See "Migrating to 1.0 from older versions" section. Or just use/download the ancient 0.7 version., (*4)
Features
- Not actually sending the message, gracefully resetting the SMTP session when done
- Command-specific communication timeouts implemented per relevant RFCs
- Catch-all account detection
- Batch mode processing supported
- Logging/debugging support
- No external dependencies
- Covered with unit/functional tests
Installation
Install via composer:, (*5)
composer require zytzagoo/smtp-validate-email --update-no-dev, (*6)
Usage examples
Basic example
<?php
require 'vendor/autoload.php';
use SMTPValidateEmail\Validator as SmtpEmailValidator;
/**
* Simple example
*/
$email = 'someone@example.org';
$sender = 'sender@example.org';
$validator = new SmtpEmailValidator($email, $sender);
// If debug mode is turned on, logged data is printed as it happens:
// $validator->debug = true;
$results = $validator->validate();
var_dump($results);
// Get log data (log data is always collected)
$log = $validator->getLog();
var_dump($log);
Multiple recipients and other details
<?php
require 'vendor/autoload.php';
use SMTPValidateEmail\Validator as SmtpEmailValidator;
/**
* Validating multiple addresses/recipients at once:
* (checking multiple addresses belonging to the same server
* uses a single connection)
*/
$emails = [
'someone@example.org',
'someone.else@example.com'
];
$sender = 'sender@example.org';
$validator = new SmtpEmailValidator($emails, $sender);
$results = $validator->validate();
var_dump($results);
/**
* The `validate()` method accepts the same parameters
* as the constructor, so this is equivalent to the above:
*/
$emails = [
'someone@example.org',
'someone.else@example.com'
];
$sender = 'sender@example.org';
$validator = new SmtpEmailValidator();
$results = $validator->validate($emails, $sender);
var_dump($results);
Migrating to 1.0 from older versions
Earlier versions used the global SMTP_Validate_Email classname.
You can keep using that name in your existing code and still switch to the newer (composer-powered) version by using aliasing/importing like this:, (*7)
Require the composer package:, (*8)
composer require zytzagoo/smtp-validate-email --update-no-dev, (*9)
And then in your code:, (*10)
<?php
require 'vendor/autoload.php';
use SMTPValidateEmail\Validator as SMTP_Validate_Email;
// Now any old code referencing `SMTP_Validate_Email` should still work as it did earlier
Development & Contributions
See the Makefile and the development dependencies in composer.json., (*11)
Running make once you clone (or download) the repository gives you:, (*12)
Usage: make [target]
[target] help
-------- ----
help What you're currently reading
install Installs dev dependencies
clean Removes installed dev dependencies
test Runs tests
coverage Runs tests with code coverage
server-start Stops and starts the smtp server
server-stop Stops smtp server if it's running
(PIDFILE) Starts the smtp server
(MAILHOG) Downloads platform-specific mailhog binary
So, run make install to get started. Afterwards you should be able to run the tests (make test)., (*13)
Tests are powered by phpunit and a local ./bin/mailhog instance running on port 1025.
Tests requiring an SMTP server are marked as skipped (if/when the SMTP server is unavailable)., (*14)
Pull requests are welcome!, (*15)
In order to get your pull request merged, please follow these simple rules:, (*16)
- all code submissions must pass cleanly (no errors) with
make test
- stick to existing code style (
phpcs is used)
- there should be no external dependencies
- if you want to add significant features/dependencies, file an issue about it first so we can discuss whether the addition makes sense for the project