1. Go to this page and download the library: Download meil/meil-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
meil / meil-php example snippets
$meil = new Meil\Meil('meil_...'); // or set MEIL_API_KEY and call new Meil\Meil()
$sent = $meil->emails->send([
'from' => 'Magazinul Tău <[email protected]>',
'to' => '[email protected]', // a string, "[email protected], [email protected]", or an array; at most 50 recipients with cc and bcc
'subject' => 'Comanda 2451 a fost expediată',
'html' => '<p>Salut Ana, comanda ta e pe drum.</p>',
]);
echo $sent['id'];
use Meil\Exception\MeilException;
use Meil\Exception\RateLimitException;
use Meil\Exception\ValidationException;
try {
$meil->emails->send($params);
} catch (ValidationException $e) {
if ($e->getErrorName() === 'send_rejected') {
error_log('Refused by the mail provider; logged as ' . $e->getId());
} else {
error_log('Invalid request: ' . $e->getMessage());
}
} catch (RateLimitException $e) {
error_log('Rate limit or quota: ' . $e->getErrorName()); // daily_quota_exceeded, monthly_quota_exceeded, ...
} catch (MeilException $e) {
error_log($e->getStatusCode() . ' ' . $e->getErrorName() . ': ' . $e->getMessage());
}
$meil = new Meil\Meil('meil_...', [
'max_retries' => 2,
'timeout' => 30, // seconds per attempt
'base_url' => 'https://api.meil.ro',
]);
$meil->emails->get($id, ['timeout' => 5, 'max_retries' => 0]); // per call
$result = $meil->broadcasts->create([
'audience_id' => 'aud_id',
'from' => 'Magazinul Tău <[email protected]>',
'subject' => 'Noutăți în martie',
'html' => '<h1>Salut {{first_name|acolo}}</h1> … <a href="{{unsubscribe_url}}">Dezabonare</a>',
'send' => true, // or 'scheduled_at' => new DateTimeImmutable('2026-11-01 09:00', new DateTimeZone('Europe/Bucharest')) on paid plans; or neither for a draft
], ['idempotency_key' => 'newsletter-2026-03']);
if ($result['status'] === 'under_review') {
// HTTP 202: the broadcast exists and waits for a person at meil.ro to look at it.
// Not an error. Check on it later with $meil->broadcasts->get($result['id']).
echo 'Held for review: ' . $result['id'] . ' ' . $result['message'];
} elseif ($result['status'] === 'draft') {
echo 'Draft saved: ' . $result['id'];
} else {
echo "{$result['status']}: {$result['recipients']} recipients";
}
$contact = $meil->contacts->add([
'audience_id' => 'aud_id',
'email' => '[email protected]',
'first_name' => 'Ana',
'properties' => ['city' => 'Cluj'],
]);
// An existing contact keeps its own values; clashes are listed in $contact['kept_properties'].
$meil->contacts->update('[email protected]', ['properties' => ['city' => 'Iași', 'old_field' => null]]); // null removes
$meil->contacts->remove('aud_id', '[email protected]'); // off one audience
$meil->contacts->delete('[email protected]'); // everywhere, with its data