Invio di Email con Laravel

Laravel include un eccellente supporto per l'invio di email già integrato, ma hai comunque bisogno di un servizio di consegna affidabile alle spalle. Il pacchetto Emailit Laravel si integra direttamente nel sistema mail di Laravel come transport nativo. I tuoi Mailable, Notification e chiamate Mail::send() esistenti funzionano senza alcuna modifica al codice. Inoltre, ottieni accesso completo all'API Emailit attraverso una comoda Facade.
L'invio di email è una delle attività più comuni in qualsiasi applicazione Laravel. Conferme di registrazione utente, reset delle password, ricevute d'ordine, aggiornamenti di spedizione e newsletter di marketing dipendono tutti da una consegna email affidabile. Mentre Laravel fornisce un potente livello di astrazione per le email, la consegna effettiva dipende ancora dal transport che configuri. Utilizzare un'API email come Emailit ti offre alta deliverability, tracciamento delle consegne, gestione dei rimbalzi e analisi dettagliate, senza dover gestire server SMTP o preoccuparti della reputazione IP.
In questa guida ti mostreremo come configurare Emailit in un'applicazione Laravel e inviare email utilizzando sia il sistema mail standard di Laravel che la Facade di Emailit.
Requisiti
- PHP 8.1 o superiore
- Laravel 10, 11 o 12
- Un account Emailit con una chiave API
Installazione
Installa il pacchetto tramite Composer:
composer require emailit/emailit-laravel
Il pacchetto si auto-registra come service provider, quindi non è necessaria alcuna registrazione manuale. Funziona con Laravel 10, 11 e 12 immediatamente.
Configurazione
Aggiungi la tua chiave API al file .env:
EMAILIT_API_KEY=la_tua_chiave_api
Imposta Emailit come mailer predefinito:
MAIL_MAILER=emailit
Aggiungi il mailer emailit all'array mailers del tuo config/mail.php:
'mailers' => [
// ...
'emailit' => [
'transport' => 'emailit',
],
],
Opzionalmente, pubblica il file di configurazione per personalizzare l'URL base dell'API:
php artisan vendor:publish --tag=emailit-config
La configurazione è intenzionalmente minimale. Una volta impostata la chiave API e il mailer predefinito, Laravel instraderà automaticamente tutta la posta in uscita attraverso Emailit. Non è necessario configurare host SMTP, porte, impostazioni di crittografia o credenziali di autenticazione come faresti con una configurazione server mail tradizionale.
Invio di email con Laravel Mail
Una volta configurato, tutte le funzionalità mail di Laravel funzionano immediatamente. Nulla nel tuo codice esistente deve cambiare.
Utilizzando un Mailable
Crea una classe Mailable come faresti normalmente:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class EmailBenvenuto extends Mailable
{
use Queueable, SerializesModels;
public function __construct(
public readonly User $user,
) {}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Benvenuto nella nostra App',
);
}
public function content(): Content
{
return new Content(
view: 'emails.benvenuto',
);
}
}
Poi inviala:
use Illuminate\Support\Facades\Mail;
use App\Mail\EmailBenvenuto;
Mail::to('utente@esempio.com')->send(new EmailBenvenuto($user));
Mail in coda, Mailable Markdown e Notification funzionano esattamente come ti aspetteresti. Emailit si posiziona in modo trasparente dietro il livello mail di Laravel, così puoi sostituirlo a qualsiasi transport esistente come SMTP, Mailgun o SES senza toccare il codice della tua applicazione. Questo rende facile testare Emailit insieme al tuo provider attuale o migrare gradualmente.
Utilizzo della Facade Emailit
Per funzionalità che vanno oltre quello che offre il sistema mail di Laravel, come template con variabili, invii programmati o gestione delle risorse API, utilizza la Facade Emailit. Ti dà accesso diretto al completo SDK PHP di Emailit.
Invia un'email tramite API
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'ciao@tuodominio.com',
'to' => ['utente@esempio.com'],
'subject' => 'Ciao da Emailit',
'html' => '<h1>Benvenuto!</h1>',
]);
echo $email->id;
echo $email->status;
Invia con un template
Fai riferimento ai template che hai creato nella dashboard di Emailit e passa variabili dinamiche:
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'ciao@tuodominio.com',
'to' => 'utente@esempio.com',
'template' => 'email_benvenuto',
'variables' => [
'nome' => 'Mario Rossi',
'azienda' => 'Acme S.r.l.',
],
]);
Utilizzare template lato server è un pattern potente per le applicazioni Laravel. I tuoi designer e marketer possono aggiornare contenuto, stile e layout delle email nella dashboard di Emailit senza richiedere modifiche al codice o nuovi deployment. Il codice PHP deve solo passare i dati, e il template gestisce il rendering.
Programma un'email
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'promemoria@tuodominio.com',
'to' => 'utente@esempio.com',
'subject' => 'Promemoria Appuntamento',
'html' => '<p>Il tuo appuntamento è domani alle 14:00.</p>',
'scheduled_at' => '2026-04-10T09:00:00Z',
]);
Le email programmate sono gestite interamente dall'API Emailit, il che significa che funzionano indipendentemente dal sistema di code di Laravel. Questo è ideale per promemoria di appuntamenti, avvisi di rinnovo abbonamenti e campagne sensibili al tempo dove vuoi una consegna garantita a un orario specifico, anche se il server della tua applicazione subisce interruzioni.
Invia con allegati
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'fatture@tuodominio.com',
'to' => 'cliente@esempio.com',
'subject' => 'La tua Fattura #12345',
'html' => '<p>Trovi la tua fattura in allegato.</p>',
'attachments' => [
[
'filename' => 'fattura.pdf',
'content' => base64_encode(file_get_contents('fattura.pdf')),
'content_type' => 'application/pdf',
],
],
]);
Gestione delle risorse
La Facade espone ogni servizio dell'API Emailit, così puoi gestire l'intera infrastruttura email da Laravel.
Domini
use Emailit\Laravel\Facades\Emailit;
$dominio = Emailit::domains()->create([
'name' => 'esempio.com',
'track_loads' => true,
'track_clicks' => true,
]);
$dominio = Emailit::domains()->verify('sd_123');
Gestire i domini di invio attraverso l'API è utile per piattaforme SaaS che devono configurare domini personalizzati per ogni cliente. Puoi automatizzare l'intero workflow di verifica del dominio, inclusi i controlli dei record DNS, direttamente dalla tua applicazione Laravel.
Contatti
use Emailit\Laravel\Facades\Emailit;
$contatto = Emailit::contacts()->create([
'email' => 'utente@esempio.com',
'first_name' => 'Mario',
'last_name' => 'Rossi',
]);
$contatti = Emailit::contacts()->list();
Verifica email
use Emailit\Laravel\Facades\Emailit;
$risultato = Emailit::emailVerifications()->verify([
'email' => 'test@esempio.com',
]);
echo $risultato->status; // valid
echo $risultato->risk; // low
Verificare gli indirizzi email al momento della registrazione o dell'invio di moduli ti aiuta a mantenere una lista contatti pulita e protegge la tua reputazione di mittente. Alti tassi di rimbalzo da indirizzi non validi possono causare che le tue email finiscano nelle cartelle spam, quindi la verifica è una best practice per qualsiasi applicazione Laravel che invia email transazionali o di marketing su larga scala.
Dependency injection
Se preferisci non utilizzare le Facade, puoi iniettare il client direttamente:
use Emailit\EmailitClient;
class EmailController extends Controller
{
public function send(EmailitClient $emailit)
{
$email = $emailit->emails()->send([
'from' => 'ciao@tuodominio.com',
'to' => ['utente@esempio.com'],
'subject' => 'Ciao',
'html' => '<p>Ciao!</p>',
]);
return response()->json(['id' => $email->id]);
}
}
Il service container di Laravel risolve automaticamente l'istanza EmailitClient con la chiave API dalla tua configurazione, così ottieni la stessa comodità della Facade con i vantaggi di testabilità della dependency injection.
Gestione degli errori
L'SDK PHP sottostante lancia eccezioni tipizzate, così puoi catturare tipi di errore specifici:
use Emailit\Exceptions\AuthenticationException;
use Emailit\Exceptions\RateLimitException;
use Emailit\Exceptions\ApiErrorException;
use Emailit\Laravel\Facades\Emailit;
try {
Emailit::emails()->send([...]);
} catch (AuthenticationException $e) {
// Chiave API non valida (401)
} catch (RateLimitException $e) {
// Troppe richieste (429)
} catch (ApiErrorException $e) {
// Qualsiasi altro errore API
echo $e->getHttpStatus();
}
In un'applicazione Laravel, puoi anche gestire queste eccezioni globalmente nel tuo exception handler o utilizzare middleware per catturare errori di rate limit e implementare logica di retry automatico. Questo assicura che la tua applicazione rimanga resiliente anche quando invia grandi volumi di email.
Tutti i servizi disponibili
La Facade ti dà accesso a tutto nell'API Emailit:
| Servizio | Utilizzo | Descrizione |
|---|---|---|
Emailit::emails() | Invia, elenca, ottieni, cancella, riprova email | |
| Domini | Emailit::domains() | Crea, verifica, elenca, gestisci domini di invio |
| Chiavi API | Emailit::apiKeys() | Crea, elenca, gestisci chiavi API |
| Audience | Emailit::audiences() | Crea, elenca, gestisci audience |
| Iscritti | Emailit::subscribers() | Aggiungi, elenca, gestisci iscritti |
| Template | Emailit::templates() | Crea, elenca, pubblica template email |
| Soppressioni | Emailit::suppressions() | Crea, elenca, gestisci indirizzi soppressi |
| Verifiche Email | Emailit::emailVerifications() | Verifica indirizzi email |
| Liste Verifiche Email | Emailit::emailVerificationLists() | Verifica email in blocco |
| Webhook | Emailit::webhooks() | Crea, elenca, gestisci webhook |
| Contatti | Emailit::contacts() | Crea, elenca, gestisci contatti |
| Eventi | Emailit::events() | Elenca e recupera eventi |
Inizia subito
Installa il pacchetto e inizia a inviare in meno di un minuto:
composer require emailit/emailit-laravel
Consulta la documentazione completa del pacchetto su GitHub, l'SDK PHP di Emailit per il client sottostante, o vai al Riferimento API per i dettagli su ogni endpoint.
Blog
Le ultime novità e aggiornamenti, direttamente da Emailit.
Rimani aggiornato con gli ultimi articoli del Blog di Emailit.


