Response Shapes
MailBridge keeps method names consistent across providers and returns lightweight result objects.
These objects are intentionally small:
- normalized top-level fields for app logic
- provider-native fields inside
metadata/datafor advanced use
Transactional Send
Methods:
MailBridge::transactional()->send(...)
Return type:
Ashraful19\LaravelMailbridge\Data\SendResult
Shape:
php
final readonly class SendResult
{
public string $provider;
public ?string $messageId;
public array $metadata;
}Example:
php
$result = MailBridge::transactional()
->to('a@example.com')
->subject('Welcome')
->text('Hello')
->send();
$result->provider; // e.g. "postmark"
$result->messageId; // provider message id when available
$result->metadata; // provider extra fields (status, ids, etc.)Marketing Actions
Methods:
subscribe()unsubscribe()deleteSubscriber()createCampaign()sendCampaign()scheduleCampaign()getCampaign()deleteCampaign()
Return type:
Ashraful19\LaravelMailbridge\Data\MarketingResult
Shape:
php
final readonly class MarketingResult
{
public string $provider;
public string $operation;
public array $metadata;
}Example:
php
$result = MailBridge::marketing()
->list('signup')
->subscribe(Subscriber::make('a@example.com'));
$result->provider; // e.g. "brevo"
$result->operation; // "subscribe"
$result->metadata; // provider extras (list, ids, modes, etc.)Subscriber Lookup
Method:
getSubscriber()
Return type:
Ashraful19\LaravelMailbridge\Data\SubscriberRecord|null
Shape:
php
final readonly class SubscriberRecord
{
public string $provider;
public string $email;
public array $data;
}Example:
php
$record = MailBridge::marketing()->getSubscriber('a@example.com');
if ($record === null) {
// not found
}
$record->provider; // e.g. "mailchimp"
$record->email; // normalized email
$record->data; // provider-native subscriber payloadMetadata Guidance
metadataanddataare provider-specific and may differ by provider and operation.- Use normalized fields (
provider,messageId,operation) for generic app flow. - Use
metadata/dataonly when your app needs provider-specific details.