# Come inviare e-mail con PHPMailer: una spiegazione

PHPMailer è una **libreria del programma** che regola l’[invio di e-mail](https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/come-funziona-linvio-di-une-mail/) tramite PHP. Questo tipo di trasmissione e-mail è utilizzato principalmente per i **moduli di contatto** sui siti web, ma è possibile anche l’invio di e-mail private.

## Cos’è PHPMailer?

PHPMailer è una **classe di posta elettronica** per PHP, fornita dalla community. Al contrario della funzione di e-mail, che è implementata su PHP sin dall’inizio, la probabilità che le e-mail inviate con PHPMailer finiscano nella cartella spam è molto più bassa, perché queste vengono inviate usando il protocollo [SMTP](https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/smtp/ "|e-mail/e-mail-technik/smtp/") (Simple Mail Transfer Protocol), che viene utilizzato per inviare e-mail su internet. Inoltre, questa classe supporta anche le e-mail e gli allegati in HTML, a differenza della funzione di posta elettronica integrata.

## Per cosa si usa PHPMailer?

L’utilizzo di PHPMailer è un po’ più complicato rispetto all’uso di un provider o dei programmi di posta elettronica integrati nel computer. Una domanda legittima è quindi in quali contesti vale la pena utilizzare PHPMailer. L’utilizzo del framework PHP rende più facile la creazione di risposte automatiche, come quelle che si utilizzano quando si gestisce un **negozio online**. Si adatta bene anche ai **moduli di contatto** inseriti sul tuo sito web.

## Requisiti per usare PHPMailer

Per poter lavorare con PHPMailer, avrai innanzitutto bisogno di un [server SMTP](https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/server-smtp/). Dipende da te la scelta di utilizzare il **server di posta elettronica di un provider** o di configurare un **server personale**. Inoltre, si raccomanda un gestore di pacchetti per PHP come Composer per l’installazione dell’estensione PHP.

Consiglio Un altro prerequisito per utilizzare PHPMailer è la padronanza delle basi di PHP. Se ancora non hai molta dimestichezza con questo linguaggio, segui il nostro [tutorial su PHP per principianti](https://www.ionos.it/digitalguide/siti-web/creare-siti/imparare-a-programmare-in-php-tutorial-per-principianti/).

## Guida: installazione di PHPMailer

### Primo passaggio: scaricare la versione attuale di PHPMailer

Scarica **l’ultima versione di PHPMailer**. Il download può essere eseguito tramite il gestore di pacchetti o manualmente da [GitHub](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/github/).

#### Prima variante: download tramite Composer

Se hai installato il gestore di pacchetti [Composer](https://getcomposer.org/ "Sito web di Composer"), usa semplicemente il comando seguente:

```bash
composer require phpmailer/phpmailer
```

**Importante**: se hai installato PHPMailer con Composer, devi includere quest’ultimo nel tuo codice PHP per poter inviare e-mail.

Per farlo, inserisci la seguente riga di codice:

```php
require_once "vendor/autoload.php";
```

La parola chiave “**require\_once**” assicura che Composer possa essere incluso una sola volta. Qualsiasi altra opzione potrebbe portare a un comportamento imprevedibile o a errori del programma. L’installazione con Composer è ora completata.

#### Seconda variante: download diretto da GitHub

I file sorgente di PHPMailer possono anche essere scaricati **manualmente** facendo clic sul pulsante “Code” nel [repository di GitHub](https://github.com/PHPMailer/PHPMailer "PHPMailer su GitHub") corrispondente e scaricando il file ZIP. Se [Git](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/tutorial-git/) è installato sul tuo sistema, puoi in alternativa “clonare” il repository usando un comando del terminale.

### Secondo passaggio: decomprimere i file

Se hai scaricato manualmente il codice sorgente di PHPMailer, devi [aprire il file ZIP](https://www.ionos.it/digitalguide/server/configurazione/aprire-file-zip/). Per farlo, seleziona la posizione in cui desideri installare PHPMailer. Di nuovo, devi prima **includere PHPMailer nel tuo script**. Partendo dal presupposto che hai decompresso i file PHPMailer in una directory chiamata con il nome del programma, usa le seguenti righe di codice per farlo:

```php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Classe per la gestione delle eccezioni e degli errori*/
require 'C:/PHPMailer/src/Exception.php';
/*Classe PHPMailer*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*Classe SMTP, necessaria per stabilire la connessione con un server SMTP*/
require 'C:/PHPMailer/src/SMTP.php';
/*Quando si crea un oggetto PHPMailer, occorre passare il parametro "true" per attivare le eccezioni (messaggi in caso di errore)*/
$email = new PHPMailer(true);
```

## Guida: invio di e-mail con PHPMailer

### Primo passaggio: integrare gli spazi dei nomi

Per accedere comodamente a PHPMailer, assicurati prima che gli **spazi dei nomi** (o “namespace” in inglese) siano inclusi correttamente. Per fare ciò si utilizzano le dichiarazioni d’uso, quindi il tuo codice dovrebbe contenere le seguenti righe:

```php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
```

Ora puoi accedere alle singole classi usando il nome dopo l’ultima barra obliqua.

### Secondo passaggio: intercettare gli errori

Anche se PHPMailer è un modo molto affidabile per inviare e-mail, gli errori possono comunque verificarsi di tanto in tanto. Per evitare che i dati sensibili del tuo server di posta siano trasmessi agli utenti sotto forma di un messaggio di errore, vale la pena circoscrivere l’invio di e-mail con una cosiddetta **istruzione try-catch**:

```php
try {
    // Tentativo di creazione di una nuova istanza della classe PHPMailer, nel caso in cui siano attivate delle eccezioni
    $mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
        echo "Mailer Error: ".$e->getMessage();
}
```

### Terzo passaggio: autenticazione con SMTP

Per usare PHPMailer, devi **autenticarti tramite SMTP**. Per farlo, inserisci l’indirizzo del server di posta, il protocollo corrispondente (o [TLS/SSL](https://www.ionos.it/digitalguide/server/sicurezza/tls-vs-ssl/) o SMTP) compresa la porta, il nome utente e la password. Quale protocollo e quale porta sono usati dipende dal tuo **provider di posta elettronica**. I dati dei rispettivi server possono essere facilmente recuperati dai **siti web dei provider di posta elettronica**.

```php
$mail->isSMTP();
$mail->SMTPAuth = true;
// Dati personali
$mail->Host = "smtp.dominio.it";
$mail->Port = 587;
$mail->Username = "nome.cognome@dominio.it";
$mail->Password = "passwordiprova4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
```

Invece di ENCRYPTION_STARTTLS, è possibile specificare ENCRYPTION_SMTPS come metodo di cifratura. Con quest’ultimo, la connessione viene stabilita **solo se il protocollo [TLS](https://www.ionos.it/digitalguide/server/sicurezza/tls-transport-layer-security/) è attivo**. La comunicazione con un server è quindi possibile solo se questo supporta le misure di crittografia richieste. Con [StartTLS](https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/starttls/), invece, la connessione al server di posta viene stabilita prima senza crittografia e solo dopo criptata. Se la crittografia TLS non è possibile, il resto dello scambio di dati non è crittografato.

SMTPS offre quindi **un livello di sicurezza superiore**, mentre StartTLS offre **una migliore compatibilità**. Per questo motivo, è preferibile utilizzare StartTLS.

### Quarto passaggio: specificare il destinatario dell’e-mail

Ora puoi specificare i **destinatari** dell’e-mail nello script.

```php
// Mittente
$mail->setFrom('info@esempio.it', 'nome');
// Destinatario, opzionalmente può essere specificato anche il nome
$mail->addAddress('info@esempio.it', 'nome');
// Copia
$mail->addCC('info@esempio.it');
// Copia nascosta
$mail->addBCC('info@esempio.it', 'nome');
```

### Quinto passaggio: aggiungere il contenuto del messaggio di posta

Naturalmente, non può mancare la cosa più importante: il contenuto dell’e-mail. Di solito consiste in un oggetto e nel corpo del testo, che è visualizzato **sia in versione HTML che non HTML**. Importante: i vecchi software non gestiscono necessariamente l’attuale standard HTML5, quindi potrebbe essere utile progettare la tua e-mail utilizzando solo [HTML](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-lhtml/).

Con PHPMailer puoi anche inviare gli **allegati** facilmente. La funzione **addAttachment** ti aiuta a farlo. **Immagini, musica, documenti, video o GIF** possono essere inviati con PHPMailer. Puoi anche rinominare i tuoi allegati con un secondo parametro opzionale che viene trasmesso alla funzione.

```php
$mail->isHTML(true);
// Oggetto
$mail->Subject = 'L’oggetto della tua e-mail';
// Contenuto HTML
$mail->Body = 'Il testo della tua e-mail come contenuto HTML. Ad esempio, anche gli elementi <b> in grassetto </b> sono ammessi.';
$mail->AltBody = 'Il testo come semplice elemento testuale';
// Aggiungere un allegato
$mail->addAttachment("/home/user/Desktop/immagineesempio.png", "immagineesempio.png");
```

### Sesto passaggio: utilizzare la corretta codifica dei caratteri

Se si utilizzano caratteri speciali, come le dieresi, è consigliabile attivare la codifica [UTF-8](https://www.ionos.it/digitalguide/siti-web/creare-siti/utf-8-codifica-della-comunicazione-digitale-globale/) su PHPMailer, in modo che non si verifichino errori di visualizzazione, soprattutto quando si utilizzano gli allegati. Per farlo, inserisci le seguenti righe di codice nel tuo script PHP:

```php
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
```

### Settimo passaggio: inviare l’e-mail

Nell’ultimo passaggio, devi solo inviare la tua e-mail. Per farlo, utilizza il comando:

```php
$mail->send();
```

Assicurati di mettere tutto il codice mostrato qui fino a questa richiesta di invio nel **blocco d’istruzione try** del tuo script, di modo che qualsiasi errore venga intercettato come descritto.

## Un esempio di codice per inviare un’e-mail

Di seguito ti riassumiamo tutto il codice necessario per inviare un’e-mail a un destinatario a scelta con un’immagine in allegato su PHPMailer:

```php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Attivare o disattivare le eccezioni tramite la variabile
$debug = true;
try {
    // Creare un’istanza della classe PHPMailer
    $mail = new PHPMailer($debug);
    if ($debug) {
        // Emette un log dettagliato da
        $mail->SMTPDebug = SMTP::DEBUG_SERVER; 
    }
    // Autenticazione tramite SMTP
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    // Login
    $mail->Host = "smtp.dominio.it";
    $mail->Port = 587;
    $mail->Username = "nome.cognome@dominio.it";
    $mail->Password = "passworddiprova4321";
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->setFrom('info@esempio.it', 'nome');
    $mail->addAddress('info@esempio.it', 'nome');
    $mail->addAttachment("/home/user/Desktop/immagineesempio.png", "immagineesempio.png");
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';
    $mail->isHTML(true);
    $mail->Subject = 'L’oggetto della tua e-mail';
    $mail->Body = 'Il testo della tua e-mail come contenuto HTML. Ad esempio, Anche gli elementi <b> in grassetto </b> sono ammessi.';
    $mail->AltBody = 'Il testo come semplice elemento testuale';
    $mail->send();
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
```


This is a markdown version of: [https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/phpmailer/](https://www.ionos.it/digitalguide/e-mail/tecnica-e-mail/phpmailer/) for AI/LLM consumption.