PHPackages                             sendry/sendry - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. sendry/sendry

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

sendry/sendry
=============

Official PHP SDK for the Sendry email API, with first-class Laravel support

v0.3.0(2mo ago)035MITPHP ^8.1

Since May 11Compare

[ Source](https://github.com/sendry-dev/sendry-php)[ Packagist](https://packagist.org/packages/sendry/sendry)[ Docs](https://sendry.online)[ RSS](/packages/sendry-sendry/feed)WikiDiscussions Synced 3w ago

READMEChangelog (1)Dependencies (5)Versions (4)Used By (0)

Sendry PHP SDK
==============

[](#sendry-php-sdk)

The official PHP client for the [Sendry](https://sendry.online) email API, with first-class Laravel support.

[![Packagist Version](https://camo.githubusercontent.com/b9167579d0472c12d085c14e6eb58ed70087e0dab51eded58b13902c8e60bdf5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73656e6472792f73656e6472792e737667)](https://packagist.org/packages/sendry/sendry)[![PHP Version](https://camo.githubusercontent.com/6d9d0c4dee6369a42991296318ff60ef54077d123e28b149119f89136f6b354b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f73656e6472792f73656e6472792e737667)](https://packagist.org/packages/sendry/sendry)[![License](https://camo.githubusercontent.com/4a6f14dc9986cc9553868947b65c6f8fc7c4397f92d444fe7d77ffc2c4b27f5d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f73656e6472792f73656e6472792e737667)](LICENSE)

Installation
------------

[](#installation)

```
composer require sendry/sendry
```

Requires PHP 8.1+. Works in plain PHP, Symfony, and Laravel 10 / 11 / 12.

Quick start (plain PHP)
-----------------------

[](#quick-start-plain-php)

```
use Sendry\Sendry;

$sendry = new Sendry(getenv('SENDRY_API_KEY'));

$response = $sendry->emails()->send([
    'from'    => 'hello@yourdomain.com',
    'to'      => 'user@example.com',
    'subject' => 'Welcome',
    'html'    => 'Thanks for signing up.',
    'text'    => 'Thanks for signing up.',
]);

echo $response['id']; // em_abc123
```

Both `$sendry->emails()` and `$sendry->emails` work — pick whichever you prefer.

Laravel
-------

[](#laravel)

The package is auto-discovered. Just publish the config and add your API key.

```
php artisan vendor:publish --tag=sendry-config
```

`.env`:

```
SENDRY_API_KEY=sn_live_your_api_key_here

```

Use the facade:

```
use Sendry\Laravel\Facades\Sendry;

Sendry::emails()->send([
    'from'    => 'hello@yourdomain.com',
    'to'      => $user->email,
    'subject' => 'Welcome, '.$user->name,
    'html'    => view('emails.welcome', ['user' => $user])->render(),
]);
```

Or resolve from the container:

```
public function handle(\Sendry\Sendry $sendry)
{
    $sendry->emails()->send([...]);
}
```

Resources
---------

[](#resources)

```
$sendry->emails()        // send, sendBatch, get, list
$sendry->domains()       // create, verify, list, delete
$sendry->templates()     // create, update, get, list, delete
$sendry->contacts()      // upsert, get, list, update, delete, bulkImport
$sendry->audiences()     // create, get, list, update, delete
$sendry->campaigns()     // create, get, list, update, schedule, send, delete
$sendry->webhooks()      // create, get, list, delete
$sendry->analytics()     // overview, breakdown, cohort, benchmark, comparison
$sendry->suppression()   // add, check, remove, list
$sendry->unsubscribes()  // list
$sendry->apiKeys()       // create, list, delete
$sendry->team()          // invite, list, updateRole, remove
$sendry->billing()       // overview, createCheckout, createPortal

```

Error handling
--------------

[](#error-handling)

```
use Sendry\Exceptions\{
    SendryException,
    AuthenticationException,
    ValidationException,
    RateLimitException,
    NotFoundException,
    ApiException,
    NetworkException,
};

try {
    $sendry->emails()->send([...]);
} catch (RateLimitException $e) {
    sleep(max($e->retryAfter, 1));
    // retry...
} catch (ValidationException $e) {
    // $e->details holds the field-level errors
    Log::warning('Sendry validation failed', (array) $e->details);
} catch (AuthenticationException $e) {
    abort(500, 'Invalid Sendry API key — check SENDRY_API_KEY');
} catch (NetworkException $e) {
    // DNS / connection / timeout — safe to retry
} catch (ApiException $e) {
    // Any other API error (5xx after retries, etc.)
    report($e);
}
```

Webhook signature verification
------------------------------

[](#webhook-signature-verification)

```
use Sendry\Sendry;

Route::post('/webhooks/sendry', function (Request $request) {
    $valid = Sendry::verifyWebhookSignature(
        $request->getContent(),
        $request->header('X-Sendry-Signature'),
        config('sendry.webhook_secret'),
    );

    abort_unless($valid, 401);

    // Process event...
});
```

`verifyWebhookSignature` uses constant-time HMAC-SHA256 comparison.

Testing
-------

[](#testing)

```
composer install
composer test
```

The suite mocks HTTP via Guzzle's `MockHandler` — no network access required.

License
-------

[](#license)

MIT — see [LICENSE](LICENSE).

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance86

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

72d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/34985127?v=4)[Stanley Otabil](/maintainers/KwaminaWhyte)[@KwaminaWhyte](https://github.com/KwaminaWhyte)

---

Tags

laravelsdkemailtransactional emailemail-apisendry

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/sendry-sendry/health.svg)

```
[![Health](https://phpackages.com/badges/sendry-sendry/health.svg)](https://phpackages.com/packages/sendry-sendry)
```

###  Alternatives

[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.2k543.5M2.7k](/packages/aws-aws-sdk-php)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

293.1k](/packages/eslazarev-wildberries-sdk)[erag/laravel-disposable-email

A Laravel package to detect and block disposable email addresses.

254168.5k](/packages/erag-laravel-disposable-email)[movemoveapp/laravel-dadata

Laravel SDK for working with the DaData.RU service API

45226.4k](/packages/movemoveapp-laravel-dadata)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
