dreamcampaigns/managesend-php
PHP client library for the DreamCampaigns (Managesend) API. Authenticate with API key/secret and send transactional “Smart” emails via the REST client. Install with Composer or manually with the included autoloader. Supports PHP 5.3–7.4.
Installation:
composer require dreamcampaigns/managesend-php
Or manually include the autoloader:
require_once __DIR__ . '/vendor/autoload.php';
Environment Configuration (Recommended):
Add to .env:
MANAGESEND_TOKEN_KEY=your_api_key
MANAGESEND_TOKEN_SECRET=your_api_secret
MANAGESEND_CLIENT_ID=your_client_id
First Use Case: Initialize the client and send a test email:
$client = new \Managesend\RestClient();
$result = $client->transactional()->sendSmartEmail(
env('MANAGESEND_CLIENT_ID'),
[
'toEmail' => 'test@example.com',
'toName' => 'Test User',
'data' => ['promoCode' => 'TEST123']
]
);
print $result->getData()->getMessageId();
Transactional Emails/SMS:
// Smart Email
$client->transactional()->sendSmartEmail($clientId, $params);
// Dynamic SMS
$client->transactional()->sendDynamicSms($clientId, $params);
Campaign Management:
// Get sent campaigns
$campaigns = $client->emailCampaign()->getCampaignsSent();
// Trigger a campaign
$client->emailCampaign()->triggerCampaign($campaignId, $params);
Subscriber Lists:
// Add subscriber
$client->lists()->addSubscriber($listId, $email, $params);
// Get list subscribers
$subscribers = $client->lists()->getSubscriberList($listId);
Service Provider Pattern:
Register the client in AppServiceProvider:
public function register()
{
$this->app->singleton(\Managesend\RestClient::class, function ($app) {
return new \Managesend\RestClient(
env('MANAGESEND_TOKEN_KEY'),
env('MANAGESEND_TOKEN_SECRET'),
env('MANAGESEND_CLIENT_ID')
);
});
}
Dependency Injection: Inject the client into controllers/services:
public function __construct(private \Managesend\RestClient $client) {}
Queue Jobs: Dispatch email/SMS jobs for async processing:
SendEmailJob::dispatch($client, $params)->onQueue('emails');
| Use Case | Implementation Pattern |
|---|---|
| User welcome emails | sendSmartEmail with dynamic merge tags |
| Password reset SMS | sendDynamicSms with template variables |
| Newsletter campaigns | triggerCampaign with segmented lists |
| Subscriber management | addSubscriber/removeSubscriber via API |
Authentication:
clientId in requests (throws 401 Unauthorized).clientId via $client->setClientId() or constructor.Rate Limiting:
429 Too Many Requests for rapid calls.$client->setRetryPolicy(new \Managesend\RetryPolicy(3, 1000));
Deprecated Methods:
Enable Debug Mode:
$client->setDebug(true); // Logs requests/responses to `storage/logs/managesend.log`
Response Inspection:
$response = $result->getResponse();
print $response->getBody(); // Raw response body
print_r($response->getHeaders()); // Response headers
Custom Requests:
Override the RestClient to add headers or modify requests:
class CustomClient extends \Managesend\RestClient {
public function request($method, $url, $params = []) {
$params['headers']['X-Custom-Header'] = 'value';
return parent::request($method, $url, $params);
}
}
Response Wrapping:
Extend Result to add custom logic:
class CustomResult extends \Managesend\Result {
public function getCustomData() {
return $this->getData()->toArray()['custom_field'];
}
}
Environment Fallbacks:
Use Laravel’s config() helper for dynamic API keys:
$client = new \Managesend\RestClient(
config('services.managesend.key'),
config('services.managesend.secret'),
config('services.managesend.client_id')
);
Client ID Scope:
setClientId() per request.Merge Tags:
data array for dynamic content (e.g., data['promoCode']).Timeouts:
30s. Adjust via:
$client->setTimeout(60); // 60 seconds
How can I help you explore Laravel packages today?