EmailValidator - PHP Email address validator

Overview

EmailValidator

Build Status Code Quality Test Coverage

A library for validating emails against several RFC.

Supported RFCs

This library aims to support RFCs:

Supported versions

Curent major version with full support is v3

Version Released EOL Only critical bug fixes Full
v3.x 2020/12/29 - X X
v2.1.x 2016/05/16 01/2022 X
v1.2 2013/19/05 YES

Requirements

Note: PHP version upgrades will happen to accomodate to the pace of major frameworks. Minor versions bumps will go via minor versions of this library (i.e: PHP7.3 -> v3.x+1). Major versions will go with major versions of the library

Installation

Run the command below to install via Composer

composer require egulias/email-validator

Getting Started

EmailValidatorrequires you to decide which (or combination of them) validation/s strategy/ies you'd like to follow for each validation.

A basic example with the RFC validation

<?php

use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\RFCValidation;

$validator = new EmailValidator();
$validator->isValid("[email protected]", new RFCValidation()); //true

Available validations

  1. RFCValidation: Standard RFC-like email validation.
  2. NoRFCWarningsValidation: RFC-like validation that will fail when warnings* are found.
  3. DNSCheckValidation: Will check if there are DNS records that signal that the server accepts emails. This does not entails that the email exists.
  4. MultipleValidationWithAnd: It is a validation that operates over other validations performing a logical and (&&) over the result of each validation.
  5. MessageIDValidation: Follows RFC2822 for message-id to validate that field, that has some differences in the domain part.
  6. Your own validation: You can extend the library behaviour by implementing your own validations.

*warnings: Warnings are deviations from the RFC that in a broader interpretation are acceptded.

<?php

use Egulias\EmailValidator\EmailValidator;
use Egulias\EmailValidator\Validation\DNSCheckValidation;
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
use Egulias\EmailValidator\Validation\RFCValidation;

$validator = new EmailValidator();
$multipleValidations = new MultipleValidationWithAnd([
    new RFCValidation(),
    new DNSCheckValidation()
]);
//ietf.org has MX records signaling a server with email capabilites
$validator->isValid("[email protected]", $multipleValidations); //true

Additional validations

Validations not present in the RFCs

  1. SpoofCheckValidation: Will check for multi-utf-8 chars that can signal an erroneous email name.

How to extend

It's easy! You just need to implement EmailValidation and you can use your own validation.

Contributing

Please follow the Contribution guide. Is short and simple and will help a lot.

Other Contributors

(You can find current contributors here)

As this is a port from another library and work, here are other people related to the previous one:

  • Ricard Clau @ricardclau: Performance against PHP built-in filter_var (v2 and earlier)
  • Josepf Bielawski @stloyd: For its first re-work of Dominic's lib
  • Dominic Sayers @dominicsayers: The original isemail function

License

Released under the MIT License attached with this code.

Comments
  • Several changes did not make it in 3.2.2 (Bad merge?)

    Several changes did not make it in 3.2.2 (Bad merge?)

    Some changes were reverted before the last release, and are not in the 3.x branch anymore. Simple examples: 4c72190f321eaf59f690a5b848707044a73da858 (Update LICENSE) and “Allow doctrine/lexer 2 by @derrabus in https://github.com/egulias/EmailValidator/pull/340”.

    Regards

    opened by DavidPrevot 33
  • Failing SwiftMailer test after upgrade to v3

    Failing SwiftMailer test after upgrade to v3

    Hi all, I hope this is the right place to ask this question as I couldn't immediately find something in the contributing guidelines. Appreciating if anyone could answer a question I have about a failing SwiftMailer test after upgrading to v3.

    I've tried patching SwiftMailer to v3 which mostly went super smooth and didn't require any code changes (thanks!). But one test is now failing for EmailValidator v3:

    https://github.com/swiftmailer/swiftmailer/blob/master/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php#L118

    With the following message:

    1) Swift_Mime_Headers_IdentificationHeaderTest::testIdRightCanBeDotAtom
    Swift_RfcComplianceException: Invalid ID given <[email protected]+&%$.d>
    
    /Users/driesvints/Sites/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php:183
    /Users/driesvints/Sites/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php:128
    /Users/driesvints/Sites/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php:99
    /Users/driesvints/Sites/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php:118
    

    The exception is being thrown here:

    https://github.com/swiftmailer/swiftmailer/blob/master/lib/classes/Swift/Mime/Headers/IdentificationHeader.php#L183

    I guess my main question is why [email protected]+&%$.d isn't a valid email address anymore in EmailValidator v3? I'm not very familiar with all of the rules from RFC 2822 so I don't immediately see what's wrong here.

    enhancement 
    opened by driesvints 13
  • Proposal: 2.0 API

    Proposal: 2.0 API

    Hi,

    I forked your lib today as I was planning to investigate it for #93. I think before adding new features, some core components need to be improved first, api-wise, and imho of course ;-) I saw you already did some work on errors & warnings. I'm talking master here.

    The Lexer

    I don't want to discuss any implementation/spec details here, im not an email expert nor a lexer expert. As its API is provided by doctrine we should keep this as is.

    The Parser

    This one is a bit weird i think, basicly there are 3 parsers, however api- and implementation-wise they are all a bit different..

    EmailParser

    • Domain part is set using EmailParser::$domainParser, i.e. using the lexer, which is good.
    • Local part is set using simple explode which somehow bypasses this test, wtf?
    • Returns parsed parts which is good.

    LocalPart

    • Doesn't use argument $localPart in parse(), it relies on EmailParser calling setInput() on the same lexer instance previously.
    • Returns no parsed part(s) nor does it allow for getLocalPart(), the logic is done back in EmailParser::parse() but that is wrong for using explode.. im lost here.

    DomainPart

    • Same flaw as LocalPart (argument $domainPart is unused in parse()).
    • Returns no parsed part(s) but allows for getDomainPart().

    Proposal

    I think the problem is LocalPart and DomainPart are not parsers itself, but they modify the Lexer state, to make the actual parser, i.e. EmailParser, work. Then again DomainPart does work as a parser. Point is.. i really think we should use the lexer/local part parser for getting the "correct" local part, i just dont get this explode thingy. I guess the individual parts as result from the parser are just unused/untested. This should work! So...;

    • Make LocalPart a parser like DomainPart, i.e. allow for getLocalPart() and use it in EmailParser
      • Point is.. if we have standalone parsers, they should work standalone. I.e. all setting its input on the lexer.
    • Move all the logic to EmailParser, i.e. perhaps it's a bit over-engineered
    • Make it part of the lexer component, i.e. just modify state on the lexer and grab the parts from it in the parser
    • Make it lexers, i.e. LocalPartLexer only reads from start to @ whereas DomainPartLexer reads from @ to end

    The Validator

    Later :) lets focus on the parser first.

    Any thoughts? :smile:

    opened by ro0NL 13
  • Migrate to doctrine/lexer v3.0

    Migrate to doctrine/lexer v3.0

    Doctrine/L just released a brand new version 3.0 and here is a PR to use this newer version.

    Let me know @egulias if I need to change anything, I am not familiar with psalm annotations.

    opened by Ph0tonic 12
  • dns_get_record(): DNS Query failed

    dns_get_record(): DNS Query failed

    dns_get_record('[email protected]', DNS_MX + DNS_A + DNS_AAAA);
    

    I got "Warning: dns_get_record(): DNS Query failed".

    I suggest add @ to dns_get_record() in https://github.com/egulias/EmailValidator/blob/840d5603eb84cc81a6a0382adac3293e57c1c64c/src/Validation/DNSCheckValidation.php#L121

    My environment:

    • Windows 10
    • PHP 7.3.12 (cli) (built: Nov 19 2019 13:58:02) ( ZTS MSVC15 (Visual C++ 2017) x64 )
    bug 
    opened by marliotto 11
  • Invalid email appears valid

    Invalid email appears valid

    $validator = new \Egulias\EmailValidator\EmailValidator();
    
    if ($validator->isValid('test  [email protected]')) {
        echo 'valid';
    }
    

    Acording to the validator this email is valid.

    bug 
    opened by v3labs 11
  • Email existence validation

    Email existence validation

    As a validation that checks for the existence of a given mailbox, not just the availability of the server to respond to SMTP request. E.g https://github.com/elliotttf/valid-mails

    enhancement 
    opened by egulias 10
  • version 1.2.6 requires doctrine/lexer dev-master

    version 1.2.6 requires doctrine/lexer dev-master

    if i install the version 1.2.6 have i the following problem:

    Problem 1 - Installation request for egulias/email-validator v1.2.6 -> satisfiable by egulias/email-validator[1.2.6]. - egulias/email-validator 1.2.6 requires doctrine/lexer dev-master -> no matching package found. Problem 2 - egulias/email-validator 1.2.6 requires doctrine/lexer dev-master -> no matching package found. - tubssp/aura 2.5.x-dev requires egulias/email-validator v1.2.6 -> satisfiable by egulias/email-validator[1.2.6]. - Installation request for tubssp/aura 2.5.x-dev -> satisfiable by tubssp/aura[2.5.x-dev].

    but the version 1.X of lexer ist needet from others: Problem 1 - The requested package doctrine/lexer could not be found in any version, there may be a typo in the package name. Problem 2 - Installation request for tubssp/aura 2.5.x-dev -> satisfiable by tubssp/aura[2.5.x-dev]. - tubssp/aura 2.5.x-dev requires doctrine/lexer master -> no matching package found. Problem 3 - Installation request for egulias/email-validator v1.2.6 -> satisfiable by egulias/email-validator[1.2.6]. - egulias/email-validator 1.2.6 requires doctrine/lexer dev-master -> no matching package found. Problem 4 - doctrine/orm v2.4.6 requires doctrine/dbal ~2.4 -> satisfiable by doctrine/dbal[v2.4.3, v2.4.0, v2.4.1, v2.4.2]. - doctrine/orm v2.4.6 requires doctrine/dbal ~2.4 -> satisfiable by doctrine/dbal[v2.4.3, v2.4.0, v2.4.1, v2.4.2]. - doctrine/dbal v2.4.3 requires doctrine/common ~2.4 -> satisfiable by doctrine/common[v2.4.2, v2.4.0, v2.4.1]. - doctrine/dbal v2.4.0 requires doctrine/common ~2.4 -> satisfiable by doctrine/common[v2.4.2, v2.4.0, v2.4.1]. - doctrine/dbal v2.4.1 requires doctrine/common ~2.4 -> satisfiable by doctrine/common[v2.4.2, v2.4.0, v2.4.1]. - doctrine/dbal v2.4.2 requires doctrine/common ~2.4 -> satisfiable by doctrine/common[v2.4.2, v2.4.0, v2.4.1]. - doctrine/dbal v2.4.3 requires doctrine/common ~2.4 -> satisfiable by doctrine/common[v2.4.2, v2.4.0, v2.4.1]. - doctrine/common v2.4.2 requires doctrine/lexer 1.* -> no matching package found. - doctrine/common v2.4.2 requires doctrine/lexer 1.* -> no matching package found. - doctrine/common v2.4.1 requires doctrine/lexer 1.* -> no matching package found. - doctrine/common v2.4.0 requires doctrine/lexer 1.* -> no matching package found. - Installation request for doctrine/orm v2.4.6 -> satisfiable by doctrine/orm[v2.4.6].

    bug 
    opened by ickbinhier 10
  • New release after 2.1.18 is 2.19.0

    New release after 2.1.18 is 2.19.0

    The release does have some new validation in it, so it might have been 2.2.0 or 2.1.19

    I guess this was an accidental error, numbering the release 2.19.0

    It is too late now, and does not do any harm - 2.2.* 2.3.* through 2.18.* will just never exist.

    I have raised this issue just to point this out, and so that when making the next release someone will continue the numbering from here - 2.19.1... then 2.20.0 - please close this issue after acknowledging.

    bug 
    opened by phil-davis 9
  • Prevent some DNS checks when not allowing local domains

    Prevent some DNS checks when not allowing local domains

    I find quite some of the failed validations I have in production are people just forgetting a dot in the domain part. As I don't allow local domains for the email address this helps in not having to make a more expensive DNS check with a long timeout.

    opened by lode 9
  • Compile Error! Declaration of Egulias\EmailValidator\Validation\MessageIDValidation::getError()...

    Compile Error! Declaration of Egulias\EmailValidator\Validation\MessageIDValidation::getError()...

    Hi and congrats on this software,

    Around October 2021 emails stopped sending at all. Fuel PHP just gives it's "Ooops! Something went wrong". On my dev site though I get the below even after removing and doing a composer re-install. :

    Compile Error! ErrorException [ Compile Error ]: Declaration of Egulias\EmailValidator\Validation\MessageIDValidation::getError() must be compatible with Egulias\EmailValidator\Validation\EmailValidation::getError(): Egulias\EmailValidator\Result\InvalidEmail

    DOCROOT/fuel/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php @ line 10

    class MessageIDValidation implements EmailValidation { ....

    Backtrace COREPATH/bootstrap.php @ line 80

    Many thanks, Robert

    opened by robert-pod-trak 7
  • Support Doctrine Lexer v2.x + v3.x

    Support Doctrine Lexer v2.x + v3.x

    Hey folks! First of all thanks for this library, it does a great job so far 👍

    I wonder if there are any plans to release a 4.x version any time soon, since it's getting harder to actually integrate it due to the hard dependency on Doctrine Lexer 1.x (current major 3.x). This will conflict with almost all new setups using a current version of Doctrine ORM/DBAL.

    Cheers!

    dependencies 
    opened by phramz 2
  • Auto multi validation

    Auto multi validation

    I created this branch to have every validation in one place by class name.

    Example use:

    $array = EmailValidatorFactory::create("[email protected]");
    
    opened by mariuszmalek 1
  • some.@tld.com marked as invalid, but should be valid according to RFC 2822

    [email protected] marked as invalid, but should be valid according to RFC 2822

    A dot before @ ([email protected]) will be marked as invalid.

    ~~Browsers (Chrome) and Symfony Validators mark them as valid too.~~

    • The Symfony-Validator can be configured to use "HTML5" or "Strict" Validation. Strict uses this validator
    • Browsers use "HTML5" Validation

    Nevertheless... As far as I can tell, according to RFC 2822 it should be valid.

    opened by FranzBruckner 2
Releases(3.2.5)
  • 3.2.5(Jan 2, 2023)

    What's Changed

    • GitHub Actions by @driesvints in https://github.com/egulias/EmailValidator/pull/348
      • Also, Coveralls removed in favor of Scrutinizer
      • composer.lock removed

    Full Changelog: https://github.com/egulias/EmailValidator/compare/3.2.4...3.2.5

    Source code(tar.gz)
    Source code(zip)
  • 3.2.4(Dec 30, 2022)

    What's Changed

    • Allow doctrine/lexer 2 by @derrabus in https://github.com/egulias/EmailValidator/pull/345

    Full Changelog: https://github.com/egulias/EmailValidator/compare/3.2.3...3.2.4

    Source code(tar.gz)
    Source code(zip)
  • 3.2.3(Dec 30, 2022)

    What's Changed

    • Bump guzzlehttp/guzzle from 7.4.3 to 7.4.5 by @dependabot in https://github.com/egulias/EmailValidator/pull/326
    • No unused imports by @MathiasReker in https://github.com/egulias/EmailValidator/pull/332
    • No superfluous elseif by @MathiasReker in https://github.com/egulias/EmailValidator/pull/331
    • Single blank line at eof by @MathiasReker in https://github.com/egulias/EmailValidator/pull/330
    • Visibility required by @MathiasReker in https://github.com/egulias/EmailValidator/pull/329
    • Nullable type declaration for default null value by @MathiasReker in https://github.com/egulias/EmailValidator/pull/328
    • CHANGELOG: Fix typo “Breacking” by @alexislefebvre in https://github.com/egulias/EmailValidator/pull/333

    New Contributors

    • @dependabot made their first contribution in https://github.com/egulias/EmailValidator/pull/326
    • @MathiasReker made their first contribution in https://github.com/egulias/EmailValidator/pull/332
    • @alexislefebvre made their first contribution in https://github.com/egulias/EmailValidator/pull/333

    Full Changelog: https://github.com/egulias/EmailValidator/compare/3.2.1...3.2.3

    Source code(tar.gz)
    Source code(zip)
  • 3.2.2(Dec 29, 2022)

    Changelog

    • #326
    • #328
    • #329
    • #330
    • #331
    • #332
    • #333
    • #340
    • #343

    What's Changed

    • Bump guzzlehttp/guzzle from 7.4.3 to 7.4.5 by @dependabot in https://github.com/egulias/EmailValidator/pull/326
    • No unused imports by @MathiasReker in https://github.com/egulias/EmailValidator/pull/332
    • No superfluous elseif by @MathiasReker in https://github.com/egulias/EmailValidator/pull/331
    • Single blank line at eof by @MathiasReker in https://github.com/egulias/EmailValidator/pull/330
    • Visibility required by @MathiasReker in https://github.com/egulias/EmailValidator/pull/329
    • Nullable type declaration for default null value by @MathiasReker in https://github.com/egulias/EmailValidator/pull/328
    • CHANGELOG: Fix typo “Breacking” by @alexislefebvre in https://github.com/egulias/EmailValidator/pull/333
    • Allow doctrine/lexer 2 by @derrabus in https://github.com/egulias/EmailValidator/pull/340
    • Bump all locked dependencies by @derrabus in https://github.com/egulias/EmailValidator/pull/343

    New Contributors

    • @dependabot made their first contribution in https://github.com/egulias/EmailValidator/pull/326
    • @MathiasReker made their first contribution in https://github.com/egulias/EmailValidator/pull/332
    • @alexislefebvre made their first contribution in https://github.com/egulias/EmailValidator/pull/333
    • @derrabus made their first contribution in https://github.com/egulias/EmailValidator/pull/340

    Full Changelog: https://github.com/egulias/EmailValidator/compare/3.2.1...3.2.2

    Source code(tar.gz)
    Source code(zip)
  • 3.2.1(Jun 18, 2022)

  • 3.2(May 28, 2022)

  • 3.1.2(Oct 11, 2021)

  • 3.1.1(Apr 1, 2021)

  • 3.1.0(Mar 7, 2021)

  • 3.0.1(Mar 6, 2021)

  • 3.0.0(Dec 29, 2020)

    EmailValidator v3 Changelog

    New Features

    • Access to local part and domain part from EmailParser
    • Validations outside of the scope of the RFC will be considered "extra" validations, thus opening the door for adding new; will live in their own folder "extra" (as requested in #248, #195, #183).

    Breacking changes

    • PHP version upgraded to match Symfony's (as of 12/2020).
    • DNSCheckValidation now fails for missing MX records. While the RFC argues that the existence of only A records to be valid, starting in v3 they will be considered invalid.
    • Emails domain part are now intenteded to be RFC 1030 compliant, rendering previous valid emails (e.g example@examp&) invalid.
    • Egulias\EmailValidator\Validation\SpoofCheckValidation has moved to Egulias\EmailValidator\Validation\Extra\SpoofCheckValidation

    PHP versions upgrade policy

    PHP version upgrade requirement will happen via MINOR (3.x) version upgrades of the library, following the adoption level by major frameworks.

    Changes

    • #235
    • #215
    • #130
    • #258
    • #188
    • #181
    • #217
    • #214
    • #249
    • #236
    • #257
    • #210

    Thanks

    To contributors, be it with PRs, reporting issues or supporting otherwise.

    Source code(tar.gz)
    Source code(zip)
  • 2.1.25(Dec 29, 2020)

  • 2.1.24(Nov 14, 2020)

  • 2.1.23(Oct 31, 2020)

  • 2.1.22(Sep 26, 2020)

  • 2.1.20(Sep 6, 2020)

  • 2.1.19(Aug 9, 2020)

  • 2.1.18(Jun 17, 2020)

  • 1.2.17(Apr 11, 2020)

  • 2.1.17(Feb 13, 2020)

  • 2.1.16(Feb 12, 2020)

  • 2.1.15(Jan 20, 2020)

  • 2.1.14(Jan 8, 2020)

  • 2.1.13(Dec 30, 2019)

  • 1.2.16(Dec 30, 2019)

  • 2.1.12(Dec 20, 2019)

  • 2.1.11(Aug 13, 2019)

  • 2.1.10(Jul 19, 2019)

  • 2.1.9(Jun 23, 2019)

Owner
Eduardo Gulias Davis
Working as a CTO at Packlink, he is passionate about technology and software & OSS author https://github.com/egulias/EmailValidator
Eduardo Gulias Davis
Laravel Disposable Email Validator

Laravel Disposable Email Validator Prevent users from registrering with a disposable email addresses! Table of Contents Installation Usage Translation

Tim Wassenburg 2 Oct 12, 2022
🥳🔐 This package is a Laravel package that checks if an email address is a spammer

This package is a Laravel package that checks if an email address is a spammer. It verifies your signups and form submissions to confirm that they are legitimate.

Endurance, the Martian 15 Dec 19, 2022
How to get cookies from users' browser and send the information to your email address and telegram bot

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MAXWELL 3 Dec 3, 2022
Trigger email failures to assert what happens on your Laravel Application when an email fails to send

Laravel Email Failer composer require --dev rogervila/laravel-email-failer About Trigger email failures to assert what happens on your Laravel Applica

Roger Vilà 30 Jul 17, 2022
laravel-model-validator

laravel-model-validator This is a simple validator. The validator can be created by command. The validator has all common table column constraint, eg:

null 6 May 22, 2022
This is a simple url bot validator made with laravel and react

?? This is a simple URL validator. Used Technologies React - Javascript framework Laravel - PHP framework Mysql - Relational database Installation Ins

Vanderson Telema 1 Oct 27, 2021
Laravel Common Password Validator

laravel-common-password-validator Laravel Common Password Validator An optimized and secure validator to check if a given password is too common. By d

WedgeHR 1 Nov 6, 2021
Laravel Dutch Phone Number Validator

Laravel Dutch Phone Number Validator Validate if the given phone number is a valid Dutch phone number Table of Contents Installation Usage Translation

Tim Wassenburg 0 May 30, 2022
A simple validator package to check if the given zipcode has a valid Dutch zipcode format

Laravel Dutch Zipcode Validator A simple validator package to check if the given zipcode has a valid Dutch zipcode format Table of Contents Installati

Tim Wassenburg 0 May 30, 2022
Simple address and contact management for Laravel with automatically geocoding to add longitude and latitude

Laravel Addresses Simple address and contact management for Laravel with automatically geocoding to add longitude and latitude. Installation Require t

Chantouch Sek 2 Apr 4, 2022
In Laravel, we commonly face the problem of adding repetitive filtering code, this package will address this problem.

Filterable In Laravel, we commonly face the problem of adding repetitive filtering code, sorting and search as well this package will address this pro

Zoran Shefot Bogoevski 1 Jun 21, 2022
Email validation service in PHP

Email validation service Email validation service in PHP using Laravel 8. Validation features Domain Regular Expression Smtp Txt records Installing de

Pedro 1 Oct 30, 2021
Email-flooder - A CLI flooder e-mail tool, made in PHP.

E-mail flooder (PHP 8.0.13) You can send emails to any server, however the request must come from Gmail. (Remember to enable less secure apps to be ab

null 2 Dec 17, 2021
A package to validate email domains in a user registration form

This package allows to define a subset of allowed email domains and validate any user registration form with a custom rule.

H-FARM 56 Jul 19, 2022
Simple transactional email classes/templates for Laravel 5 mailables

Tuxedo Tuxedo is an easy way to send transactional emails with Laravel's Mail classes, with the templates already done for you. Contents Installation

Tom Irons 92 May 27, 2022
A package to validate email domains in a user registration form

Laravel Email Domain Rule This package allows to define a subset of allowed email domains and validate any user registration form with a custom rule.

H-FARM Innovation 56 Jul 19, 2022
Laravel package for giving admin-created accounts to users via 'set-password' email.

Invytr When making a website where users are created instead of registering themselves, you are faced with the challenge of safely giving users the ac

GlaivePro 64 Jul 17, 2022
A bring-your-own-email-first newsletter service. ✨

Typewrite Typewrite a hosted bring-your-own-email newsletter service for people who need a simplistic and privacy-first newsletter service. The core a

Ryan Chandler 3 Dec 2, 2021
Provides email verification on the go.

Email Checker Email Checker was created and maintained by Aman Nurani. It provides a powerful email validating system for both development and product

Aman 137 Dec 23, 2022