Download the PHP package orboto/mail without Composer
On this page you can find all versions of the php package orboto/mail. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package mail
Short Description Official PHP SDK for the Orboto Mail Service. Drop-in transactional-mail client with auto-quota-tracking, retry-with-backoff, quota lifecycle events, typed DTOs, and a Laravel Service-Provider out of the box. EU-hosted, GDPR-compliant.
License MIT
Homepage https://mail.orboto.io
Informations about the package mail
@orboto/mail - PHP SDK
Official PHP SDK for the Orboto Mail Service. Drop-in transactional-mail client with auto-quota-tracking, retry-with-backoff, quota lifecycle events, typed DTOs, and a Laravel Service-Provider out of the box. EU-hosted, GDPR-compliant.
Same API surface as the TypeScript SDK @orboto/mail - release versions stay in lockstep.
Install
Requires PHP 8.2+ and any PSR-18 HTTP client (Guzzle is auto-discovered if present; see HTTP client below if you want to plug in a different one).
Quick start
Get an API key at account.orboto.io/mail/api-keys.
Send with CC + BCC
Max 50 entries each. cc recipients show in the recipient's headers; bcc recipients receive the mail but never appear in any header (envelope-only per RFC 2822). One quota decrement per call regardless of recipient count.
Send with attachments
Up to 20 attachments per send; total decoded size capped at 30 MB. Pass an optional contentId to reference an attachment inline from your HTML (<img src="cid:logo-1">).
Send a batch
Capped at 100 messages per call. Per-item processing - the call as a whole always returns 200; inspect $batch->summary and per-item ok flags to decide whether to retry indices.
Templates
Quota lifecycle events
Each threshold event fires once per quota-reset period - a customer who lingers at 81 % doesn't get a quota-warning for every send.
Errors
Every non-2xx response surfaces as a typed exception:
Overage billing (wallet). Once the monthly included quota is used up, above-quota sends draw on the account wallet. A successful overage send returns
overage = true; an empty wallet throwsPaymentRequiredException(402) and a brief billing outage throwsWalletUnavailableException(503, fail-closed - the send is not dispatched). Both extendOrbotoMailException. Catch the specific classes BEFOREQuotaExhaustedException/OrbotoMailException(PHP matches the first compatiblecatch).
| HTTP status | reason value | Exception |
|---|---|---|
| 400 | recipient_suppressed |
SuppressedRecipientException |
| 400 | from_domain_not_authorized |
OrbotoMailException - add domain at account.orboto.io/mail/sender-domains |
| 401 | connection_revoked |
ConnectionRevokedException |
| 402 | payment_required |
PaymentRequiredException - top up at account.orboto.io/mail/billing |
| 402 | base_quota / quota_exhausted_daily / etc. |
QuotaExhaustedException |
| 503 | wallet_unavailable |
WalletUnavailableException (auto-retried first) |
| 502 / 503 / 504 | any other | OrbotoMailException (auto-retried with backoff) |
Configuration
Constructor options (all optional except apiKey):
Environment variables (used when the corresponding option is omitted):
| Variable | Default |
|---|---|
OMS_API_KEY |
(required) |
OMS_BASE_URL |
https://mail.orboto.io/api |
HTTP client
The SDK uses PSR-18 + PSR-17. By default it auto-discovers an installed client via php-http/discovery. If you have Guzzle installed (composer require guzzlehttp/guzzle) it picks Guzzle. If you prefer Symfony's HTTP client or anything else PSR-18-compatible, install that package and discovery routes to it - or inject explicitly via the httpClient / requestFactory / streamFactory options.
Laravel
The SDK ships a Service-Provider + Facade + Notification Channel for Laravel 11+. Auto-discovery wires them in on composer require.
Publish the config:
Then in code:
Or as a Notification Channel:
API reference
All resources are accessible as public properties on the OrbotoMail instance:
| Resource | Methods |
|---|---|
$mail->suppression |
check, add, remove, list |
$mail->templates |
list, get, create, update, remove |
$mail->webhooks |
list, get, create, update, remove, rotateSecret |
$mail->sends |
list, get |
$mail->inbound |
list, get |
$mail->senderDomains |
cloudflareDetect, cloudflareAutoSetup |
$mail->apiKeys |
list, get, create, revoke, rotate |
Plus top-level send methods: send, sendBatch, sendTemplate, getQuota.
Full DTO list in src/Dto/. Every type is a readonly class with a fromArray() constructor for round-tripping over the wire.
Versioning
Releases stay in lockstep with the TypeScript SDK and the API backend - same vX.Y.Z tag bumps @orboto/mail (npm) + orboto/mail (Packagist) + the API container together. Patch releases are pure bug-fix / docs; minor releases add API surface; major releases imply a breaking change to the public method signatures (none yet).
License
MIT (see LICENSE.md). The PHP SDK is open-source; the OMS API backend it talks to is under the Sustainable Use License (see the repo root).
Support
- Docs: https://mail.orboto.io
- Customer portal: https://account.orboto.io/mail
- Issues: https://github.com/orboto/orboto-mail-php/issues
All versions of mail with dependencies
psr/http-client Version ^1.0
psr/http-factory Version ^1.0
psr/http-message Version ^1.1 || ^2.0
php-http/discovery Version ^1.19