PHP code example of samuelterra22 / volpa-mail-laravel

1. Go to this page and download the library: Download samuelterra22/volpa-mail-laravel 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/ */

    

samuelterra22 / volpa-mail-laravel example snippets


use SamuelTerra\VolpaMail\Facades\VolpaMail;

$sent = VolpaMail::emails()->send([
    'from'    => ['email' => '[email protected]', 'name' => 'Athelier'],
    'to'      => [['email' => '[email protected]']],
    'subject' => 'Sua reserva foi confirmada!',
    'html'    => '<h1>Obrigado!</h1>',
]);

echo $sent->id;            // eml_123
echo $sent->status->value; // queued

'mailers' => [
    // ...
    'volpa-mail' => [
        'transport' => 'volpa-mail',
    ],
],

use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;

Mail::mailer('volpa-mail')->to($user->email)->send(new WelcomeMail($user));

use SamuelTerra\VolpaMail\Facades\VolpaMail;

$sent = VolpaMail::emails()->send([
    'from'        => ['email' => '[email protected]', 'name' => 'Volpa'],
    'to'          => [['email' => '[email protected]', 'name' => 'João']],
    'cc'          => [['email' => '[email protected]']],
    'subject'     => 'Sua reserva foi confirmada!',
    'html'        => '<h1>Obrigado, João!</h1>',
    'text'        => 'Obrigado, João!',
    'template_id' => 'reservation-confirmation',
    'variables'   => ['name' => 'João', 'date' => '20/06/2026'],
    'tags'        => ['reserva'],
    'headers'     => ['X-Campaign' => 'reservas-junho'],
]);

use SamuelTerra\VolpaMail\Data\Address;
use SamuelTerra\VolpaMail\Data\SendEmailData;
use SamuelTerra\VolpaMail\Facades\VolpaMail;

$sent = VolpaMail::emails()->send(new SendEmailData(
    from:    new Address('[email protected]', 'Volpa'),
    to:      [new Address('[email protected]', 'João')],
    subject: 'Olá',
    html:    '<p>Conteúdo</p>',
));

use Illuminate\Support\Str;
use SamuelTerra\VolpaMail\Facades\VolpaMail;

// Primeira tentativa
$sent = VolpaMail::emails()->send([
    'from'    => ['email' => '[email protected]'],
    'to'      => [['email' => '[email protected]']],
    'subject' => 'Confirmação de pedido',
    'html'    => '<p>Seu pedido foi confirmado.</p>',
], Str::uuid7());

// Segunda chamada com a mesma chave — sem reenvio, retorna o mesmo $sent

use SamuelTerra\VolpaMail\Enums\SuppressionReason;
use SamuelTerra\VolpaMail\Facades\VolpaMail;

// Listar supressões (com filtros opcionais)
$suppressions = VolpaMail::suppressions()->list(['reason' => 'hard_bounce']);

// Adicionar uma supressão manualmente
$suppression = VolpaMail::suppressions()->create(
    '[email protected]',
    SuppressionReason::Manual,
);

// Consultar
$suppression = VolpaMail::suppressions()->get('[email protected]');

// Remover (permite reenvio para este endereço)
VolpaMail::suppressions()->delete('[email protected]');

// Importar em lote
VolpaMail::suppressions()->import(
    ['[email protected]', '[email protected]'],
    SuppressionReason::HardBounce,
);

use SamuelTerra\VolpaMail\Facades\VolpaMail;

// Contatos
$contacts = VolpaMail::contacts()->list(['status' => 'active']);
$contact  = VolpaMail::contacts()->create([
    'email' => '[email protected]',
    'name'  => 'João Silva',
]);
$contact  = VolpaMail::contacts()->get($contact->id);

// Listas de contatos
$lists = VolpaMail::contactLists()->list();
$list  = VolpaMail::contactLists()->create(['name' => 'Newsletter Junho']);
$list  = VolpaMail::contactLists()->get($list->id);

// Importar contatos para uma lista
VolpaMail::contactLists()->import($list->id, [
    ['email' => '[email protected]', 'name' => 'Ana'],
    ['email' => '[email protected]', 'name' => 'Bruno'],
]);

use SamuelTerra\VolpaMail\Facades\VolpaMail;

// Criar um broadcast (campanha)
$broadcast = VolpaMail::broadcasts()->create([
    'name'        => 'Promoção Julho',
    'subject'     => 'Aproveite as ofertas de julho!',
    'template_id' => 'promo-julho',
    'list_id'     => $list->id,
]);

// Enviar
$result = VolpaMail::broadcasts()->send($broadcast->id);
// $result = ['id' => '...', 'status' => 'sending', 'total_queued' => 1234]

// Cancelar (enquanto ainda não completou)
$broadcast = VolpaMail::broadcasts()->cancel($broadcast->id);

// Listar e consultar
$all       = VolpaMail::broadcasts()->list();
$broadcast = VolpaMail::broadcasts()->get($broadcast->id);

use Illuminate\Http\Request;
use SamuelTerra\VolpaMail\Webhooks\WebhookVerifier;

class VolpaWebhookController extends Controller
{
    public function handle(Request $request): \Illuminate\Http\Response
    {
        $secret   = config('services.volpa_mail.webhook_secret');
        $verifier = new WebhookVerifier();

        if (! $verifier->verifyRequest($request, $secret)) {
            abort(401, 'Assinatura inválida.');
        }

        $event = $verifier->parseEvent($request->getContent());
        // $event->type    — ex.: 'email.delivered'
        // $event->created — timestamp ISO 8601
        // $event->data    — array com os detalhes do evento

        // Processar o evento...
        return response('', 200);
    }
}

$ok = $verifier->verify(
    payload:         $rawBody,
    secret:          $secret,
    signatureHeader: $request->header('X-VolpaMail-Signature'),
    tolerance:       300, // segundos (padrão)
);

use SamuelTerra\VolpaMail\Data\Attachment;
use SamuelTerra\VolpaMail\Facades\VolpaMail;

VolpaMail::emails()->send([
    'from'        => ['email' => '[email protected]'],
    'to'          => [['email' => '[email protected]']],
    'subject'     => 'Sua nota fiscal',
    'html'        => '<p>Segue em anexo.</p>',
    'attachments' => [
        Attachment::fromPath(storage_path('app/notas/nf-123.pdf')),
    ],
]);

new Attachment(
    filename:    'nf-123.pdf',
    content:     base64_encode($pdfBytes),
    contentType: 'application/pdf',
);

$email = VolpaMail::emails()->get('eml_123');

$email->id;                   // 'eml_123'
$email->status;               // EmailStatus enum
$email->status->value;        // 'delivered'
$email->status->isTerminal(); // true for delivered/bounced/failed/complained/rejected/canceled
$email->from;                 // ?string — sender address
$email->to;                   // list<string> — recipient addresses
$email->subject;              // ?string
$email->messageStream;        // ?string — stream/pool identifier

use SamuelTerra\VolpaMail\Exceptions\VolpaMailException;
use SamuelTerra\VolpaMail\Facades\VolpaMail;

try {
    VolpaMail::emails()->send([/* ... */]);
} catch (VolpaMailException $e) {
    $e->getMessage();   // human-readable message from the API
    $e->status;         // ?int — HTTP status code (e.g. 422)
    $e->errors;         // array<string, mixed> — field => [messages]
    $e->errorCode;      // ?string — machine code, e.g. 'sender_not_found'
    $e->retryAfter;     // ?int — seconds to wait (parsed from Retry-After on 429)
}
bash
php artisan vendor:publish --tag=volpa-mail-config