Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Mailgun Email Validation Laravel Package

arturbruno/laravel-mailgun-email-validation

Laravel validation rule that checks emails with PHP FILTER_VALIDATE_EMAIL then Mailgun’s Email Validation API. Supports role/disposable checks, mailbox verification, and strict mode to fail when Mailgun can’t be reached.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require arturbruno/laravel-mailgun-email-validation
    

    Publish the config file:

    php artisan vendor:publish --provider="ArturBruno\MailgunEmailValidation\MailgunEmailValidationServiceProvider"
    
  2. Configuration Update .env with your Mailgun API key and domain:

    MAILGUN_API_KEY=your-api-key
    MAILGUN_DOMAIN=your-domain.mailgun.org
    
  3. First Use Case Validate an email in a Laravel form request:

    use ArturBruno\MailgunEmailValidation\Rules\MailgunEmailValidation;
    
    public function rules()
    {
        return [
            'email' => ['required', new MailgunEmailValidation],
        ];
    }
    

Implementation Patterns

Workflow Integration

  1. Form Validation Use the rule in Laravel's built-in validation:

    $request->validate([
        'email' => ['required', 'email', new MailgunEmailValidation],
    ]);
    
  2. API Endpoints Validate emails in API responses:

    $validator = Validator::make($request->all(), [
        'email' => new MailgunEmailValidation,
    ]);
    
  3. Custom Validation Logic Extend the rule for conditional checks:

    $validator = Validator::make($data, [
        'email' => function ($attribute, $value, $fail) {
            if ($this->shouldValidateEmail($value)) {
                $fail(new MailgunEmailValidation);
            }
        },
    ]);
    

Common Patterns

  • Batch Validation Validate multiple emails in a loop:

    foreach ($emails as $email) {
        $validator = Validator::make(['email' => $email], [
            'email' => new MailgunEmailValidation,
        ]);
        if ($validator->fails()) {
            // Handle failure
        }
    }
    
  • Async Validation Use queues to avoid blocking the user:

    EmailValidationJob::dispatch($email);
    

Gotchas and Tips

Pitfalls

  1. Rate Limits Mailgun API has rate limits. Avoid excessive calls in loops without delays. Tip: Cache results for repeated validations.

  2. API Key Exposure Never expose MAILGUN_API_KEY in client-side code. Always validate server-side.

  3. Domain Restrictions The package validates against the configured MAILGUN_DOMAIN. Ensure this matches your use case.

Debugging

  • Enable Logging Add debug logs to track API calls:

    \Log::debug('Mailgun validation payload:', ['email' => $email]);
    
  • Mock API Calls For testing, mock the Mailgun client:

    $this->mock(Mailgun::class, function ($mock) {
        $mock->shouldReceive('validateEmail')->andReturn(true);
    });
    

Extension Points

  1. Custom Validation Steps Extend the MailgunEmailValidator class to add custom checks:

    class CustomMailgunValidator extends MailgunEmailValidator
    {
        public function validate($email)
        {
            $result = parent::validate($email);
            // Add custom logic
            return $result;
        }
    }
    
  2. Override Default Config Modify the config file to adjust timeout, retries, or API endpoints:

    'timeout' => 10, // seconds
    'retries' => 3,
    
  3. Event Listeners Listen for validation events to trigger side effects:

    \Event::listen(MailgunEmailValidation::class, function ($email) {
        // Log or notify on validation
    });
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope