PHP: inviare email con allegati usando la funzione mail()

PHP: inviare email con allegati usando la funzione mail()

L'invio di email è una funzionalità essenziale per molte applicazioni web, che richiedono la possibilità di inviare email contenenti informazioni o documenti importanti. La funzione mail() di PHP è uno strumento utile per inviare email dal proprio server web, e in questo articolo spiegheremo come utilizzarla per inviare email con allegati.

Prima di iniziare, è importante assicurarsi che il server web sia configurato correttamente per l'invio di email. In particolare, è necessario verificare che il server sia configurato per l'invio di email tramite il protocollo SMTP, e che le impostazioni di autenticazione siano corrette.

Una volta verificata la configurazione del server, è possibile utilizzare la funzione mail() di PHP per inviare email con allegati. La funzione mail() richiede almeno tre parametri: l'indirizzo email del destinatario, l'oggetto dell'email e il contenuto dell'email. Per allegare un file all'email, è necessario utilizzare alcune opzioni aggiuntive.

Ecco un esempio di codice che mostra come inviare un'email con un allegato utilizzando la funzione mail() di PHP:


$to = 'destinatario@email.com';
$subject = 'Oggetto dell\'email';
$message = 'Contenuto dell\'email';
$attachment = '/path/to/file.pdf';
$filename = 'file.pdf';
$filetype = 'application/pdf';
$filecontent = file_get_contents($attachment);
$boundary = uniqid();

$headers = "From: mittente@email.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$headers .= "\r\n--$boundary\r\n";
$headers .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "\r\n$message\r\n";
$headers .= "\r\n--$boundary\r\n";
$headers .= "Content-Type: $filetype; name=\"$filename\"\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"$filename\"\r\n";
$headers .= "\r\n" . chunk_split(base64_encode($filecontent)) . "\r\n";
$headers .= "--$boundary--";

if (mail($to, $subject, '', $headers)) {
  echo 'Email inviata con successo';
} else {
  echo 'Errore durante l\'invio dell\'email';
}

In questo esempio, la variabile $attachment contiene il percorso del file da allegare, mentre le variabili $filename e $filetype contengono rispettivamente il nome del file e il tipo di contenuto. Il contenuto del file viene letto utilizzando la funzione file_get_contents(), e viene codificato in Base64 utilizzando la funzione base64_encode().

Il parametro $headers contiene l'intestazione dell'email, compresi i dati relativi all'allegato. In particolare, l'intestazione include il tipo di contenuto multipart/mixed, che indica che l'email contiene sia testo che allegati. L'allegato è specificato utilizzando l'intestazione Content-Type, mentre l'intestazione Content-Disposition indica che il file deve essere considerato come un allegato.

Infine, la funzione chunk_split() viene usata per dividere la stringa in Base64 in parti più piccole al fine di aderire allo standard RFC 2045 che regola il formato dei messaggi delle email. La funzione mail() restituisce un valore booleano che indica l'esito dell'operazione. Si tenga comunque presente che tale valore riguarda unicamente il fatto che l'MTA del server ha preso in carico il messaggio e non indica affatto che il messaggio sia arrivato a destinazione.

Torna su