mailgreet/mailgreet-laravel

Official MailGreet SDK for Laravel — send transactional emails, manage subscribers, and use as a native Laravel mailer

Maintainers

Package info

github.com/mailgreet/mailgreet-laravel

Homepage

pkg:composer/mailgreet/mailgreet-laravel

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-02-28 01:42 UTC

This package is auto-updated.

Last update: 2026-04-28 02:17:02 UTC


README

Official Laravel SDK for MailGreet — send transactional emails, manage subscribers, and use as a native Laravel mailer.

Installation

composer require mailgreet/mailgreet-laravel

Configuration

Add your API key to .env:

MAILGREET_API_KEY=mailgreet_xxxxx

Optionally publish the config file:

php artisan vendor:publish --tag=mailgreet-config

Quick Start — Facade

use MailGreet\Laravel\Facades\MailGreet;

// Send an email
MailGreet::emails()->send([
    'from' => 'hello@yourdomain.com',
    'to' => 'user@gmail.com',
    'subject' => 'Hello from MailGreet',
    'html' => '<p>It works!</p>',
]);

Using as Laravel Mailer

MailGreet integrates as a native Laravel mail transport. Add the mailer to config/mail.php:

'mailers' => [
    // ... other mailers

    'mailgreet' => [
        'transport' => 'mailgreet',
    ],
],

Set it as your default mailer in .env:

MAIL_MAILER=mailgreet

Now use Laravel's standard Mail facade:

use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

Mail::to('user@gmail.com')->send(new WelcomeEmail());

API Resources

Emails

// Send a single email
MailGreet::emails()->send([
    'from' => 'hello@yourdomain.com',
    'to' => 'user@gmail.com',
    'subject' => 'Hello',
    'html' => '<h1>World</h1>',
    'text' => 'World',                  // Optional plain-text
    'cc' => ['cc@example.com'],         // Optional
    'bcc' => ['bcc@example.com'],       // Optional
    'reply_to' => 'reply@example.com',  // Optional
    'track_opens' => true,              // Optional
    'track_clicks' => true,             // Optional
    'metadata' => ['order_id' => '123'],// Optional
]);

// Send batch (up to 100)
MailGreet::emails()->sendBatch([
    ['from' => '...', 'to' => '...', 'subject' => '...', 'html' => '...'],
    ['from' => '...', 'to' => '...', 'subject' => '...', 'html' => '...'],
]);

// List sent emails
$emails = MailGreet::emails()->list(['page' => 1, 'limit' => 25, 'status' => 'sent']);

// Get email details
$email = MailGreet::emails()->get('email-uuid');

// Email statistics
$stats = MailGreet::emails()->stats();

Subscribers

// Create
$subscriber = MailGreet::subscribers()->create([
    'email' => 'user@example.com',
    'first_name' => 'John',
    'last_name' => 'Doe',
    'group_ids' => ['group-uuid'],
]);

// List
$subscribers = MailGreet::subscribers()->list(['status' => 'active', 'search' => 'john']);

// Get / Update / Delete
$subscriber = MailGreet::subscribers()->get('subscriber-uuid');
MailGreet::subscribers()->update('subscriber-uuid', ['first_name' => 'Jane']);
MailGreet::subscribers()->delete('subscriber-uuid');

// Statistics
$stats = MailGreet::subscribers()->stats();

// Async import
MailGreet::subscribers()->importAsync([
    'subscribers' => [
        ['email' => 'a@example.com', 'first_name' => 'A'],
        ['email' => 'b@example.com', 'first_name' => 'B'],
    ],
    'group_ids' => ['group-uuid'],
]);

Forms

$forms = MailGreet::forms()->list();
$form = MailGreet::forms()->get('form-uuid');
$stats = MailGreet::forms()->stats('form-uuid');
$submissions = MailGreet::forms()->submissions('form-uuid', ['page' => 1]);

Groups & Fields

$groups = MailGreet::groups()->list();
$fields = MailGreet::fields()->list();

Account

$account = MailGreet::account()->me();

Webhook Verification

use MailGreet\Laravel\Webhooks\WebhookSignature;

Route::post('/webhook/mailgreet', function (Request $request) {
    $isValid = WebhookSignature::verify(
        $request->getContent(),
        $request->header('X-Webhook-Signature'),
        config('services.mailgreet.webhook_secret')
    );

    if (!$isValid) {
        abort(401, 'Invalid webhook signature');
    }

    $event = $request->input('event');
    $data = $request->input('data');

    // Handle the event...

    return response('OK', 200);
});

Error Handling

use MailGreet\Laravel\Exceptions\ApiException;
use MailGreet\Laravel\Exceptions\RateLimitException;
use MailGreet\Laravel\Exceptions\MailGreetException;

try {
    MailGreet::emails()->send([...]);
} catch (RateLimitException $e) {
    Log::warning("Rate limited. Retry after {$e->getRetryAfterSeconds()}s");
} catch (ApiException $e) {
    Log::error("API error {$e->getStatusCode()}: {$e->getMessage()}");
    Log::error('Validation errors:', $e->getValidationErrors() ?? []);
} catch (MailGreetException $e) {
    Log::error("MailGreet error: {$e->getMessage()}");
}

Configuration Options

.env Variable Default Description
MAILGREET_API_KEY Your MailGreet API key (required)
MAILGREET_BASE_URL https://api.mailgreet.com API base URL
MAILGREET_TIMEOUT 30 Request timeout in seconds
MAILGREET_MAX_RETRIES 3 Max retries on 5xx/network errors

Requirements

  • PHP 8.1+
  • Laravel 10, 11, or 12

License

MIT