Come inviare e-mail utilizzando la funzione PHP mail()
โก Riepilogo intelligente
PHP mail รจ la funzione integrata che invia email direttamente da uno script PHP utilizzando le impostazioni SMTP del server. Questa guida illustra la sintassi e i parametri di mail(), la configurazione di SMTP in php.ini, la sanificazione dell'input dell'utente con filter_var, l'invio di email sicure e l'utilizzo di PHP.Mailer per consegne affidabili.

Che cos'รจ PHP mail?
PHP mail รจ la funzione integrata di PHP utilizzata per inviare email dagli script PHP.
La funzione mail accetta i seguenti parametri:
- Indirizzo email
- Oggetto
- Messaggio
- Indirizzi email CC o BCC
Perchรฉ e quando utilizzare PHP mail
La funzione di posta elettronica รจ utile in molte situazioni:
- Si tratta di un metodo economicamente vantaggioso per informare gli utenti di eventi importanti.
- Consenti agli utenti di contattarti via e-mail fornendo un modulo di contatto sul sito Web che invia tramite e-mail il contenuto fornito.
- Gli sviluppatori possono utilizzarlo per ricevere gli errori di sistema via e-mail.
- Puoi utilizzarlo per inviare email agli iscritti alla tua newsletter.
- ร possibile utilizzarlo per inviare link di reimpostazione della password agli utenti che la dimenticano.
- ร possibile utilizzarlo per inviare link di attivazione e conferma via e-mail. Questo รจ utile durante la registrazione degli utenti e la verifica dei loro indirizzi e-mail.
Invio di posta tramite PHP
La funzione mail di PHP ha la seguente sintassi di base.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
QUI,
- โ$to_email_addressโ รจ lโindirizzo email del destinatario della posta
- โ$subjectโ รจ lโoggetto dellโemail
- โ$messageโ รจ il messaggio da inviare.
- โ[$headers]โ รจ facoltativo; puรฒ essere utilizzato per includere informazioni come CC e BCC.
- CC รจ l'acronimo di "copia carbone". Si usa quando si desidera inviare una copia a una persona interessata, ad esempio un'e-mail di reclamo inviata a un'azienda puรฒ essere inviata anche in copia conoscenza (CC) all'organo di controllo dei reclami.
- BCC รจ l'acronimo di copia carbone nascosta. ร simile a CC, ma gli indirizzi email inclusi nella sezione BCC non vengono visualizzati dagli altri destinatari.
Semplice Mail Transmission Protocollo (SMTP)
La posta PHP utilizza il Semplice Mail Transmission Protocollo (SMTP) per inviare posta.
Su un server ospitato, le impostazioni SMTP sarebbero giร state configurate.
Le impostazioni di posta SMTP possono essere configurate tramite il file "php.ini" presente nella cartella di installazione di PHP.
Per configurare le impostazioni SMTP sul tuo localhost, supponendo che tu stia usando XAMPP su WindowsIndividua il file โphp.iniโ nella directory โC:\xampp\phpโ.
- Apri il file usando Blocco note o qualsiasi altro editor di testo. In questo esempio useremo Blocco note. Fai clic sul menu Modifica.
- Fai clic sul menu Trovaโฆ
- Verrร visualizzata la finestra di dialogo Trova
- Fai clic sul pulsante Trova successivo
Individua le voci sotto [funzione mail]. Le righe predefinite di solito hanno questo aspetto:
- ; SMTP = host locale
- ; porta_smtp = 25
Rimuovi i punti e virgola prima di SMTP e smtp_port e imposta SMTP su Server SMTP e la porta alla tua porta SMTP. Le tue impostazioni dovrebbero essere simili a queste:
- SMTP = smtp.esempio.com
- porta_smtp = 25
Nota: le impostazioni SMTP possono essere ottenute dal tuo provider di hosting web. Se il server richiede l'autenticazione, aggiungere le seguenti righe:
- auth_username = example_username@example.com
- autenticazione_password = esempio_password
Salva le nuove modifiche e riavvia il Apache server.
PHP Mail Esempio
Vediamo ora un esempio di invio di una semplice email.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
Produzione:
Nota: l'esempio sopra riportato accetta solo i 4 parametri obbligatori. ร necessario sostituire l'indirizzo email fittizio con un indirizzo email reale.
Sanificazione degli input degli utenti di posta elettronica
Per semplicitร , nell'esempio sopra riportato vengono utilizzati valori hardcoded nel codice sorgente per l'indirizzo e-mail e altri dettagli.
Supponiamo che tu debba creare un modulo di contatto in cui gli utenti inseriscono i propri dati e poi lo inviano.
- Gli utenti possono inserire accidentalmente o intenzionalmente del codice nelle intestazioni, il che puรฒ comportare l'invio di email di spam.
- Per proteggere il sistema da tali attacchi, puoi creare una funzione personalizzata che pulisca e convalidi i valori prima dell'invio della mail.
Creiamo una funzione personalizzata che convalidi e sanifichi l'indirizzo email utilizzando la funzione integrata `filter_var`. La funzione `filter_var` viene utilizzata per sanificare e convalidare i dati inseriti dall'utente.
La sintassi di base รจ la seguente.
<?php filter_var($field, SANITIZATION_TYPE); ?>
QUI,
- โfilter_var(โฆ)โ รจ la funzione di convalida e sanificazione
- โ$fieldโ รจ il valore del campo da filtrare.
- โSANITIZATION_TYPEโ indica il tipo di sanificazione da effettuare sul campo, ad esempio:
- FILTRO_VALUTA_EMAIL โ restituisce true per gli indirizzi email validi e false per gli indirizzi email non validi.
- FILTRO_SANIFICA_EMAIL โ rimuove i caratteri non validi dagli indirizzi email, in modo che un indirizzo contenente caratteri indesiderati venga ridotto a info@dominio.com.
- FILTRO_SANIFICAZIONE_URL โ rimuove i caratteri illegali da URLlasciando un indirizzo pulito come https://www.example.com.
- FILTER_SANITIZE_STRING โ rimuove i tag dai valori stringa, quindi am bold diventa am bold. Nota: questo filtro รจ deprecato in PHP 8.1; usa htmlspecialchars() al suo posto.
Il codice seguente utilizza una funzione personalizzata per inviare email sicure.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
Produzione:
Assicurate Mail
Le e-mail possono essere intercettate durante la trasmissione da destinatari indesiderati.
Ciรฒ puรฒ esporre il contenuto dell'e-mail a destinatari non previsti.
La posta sicura risolve questo problema transmitinviare email tramite una connessione crittografata utilizzando SSL o TLS, ad esempio SMTP su SSL sulla porta 465 o STARTTLS sulla porta 587.
La crittografia codifica il messaggio prima di inviarlo, in modo che solo il server di posta del destinatario previsto possa leggerlo.
PHPMailer: Un'alternativa migliore a mail()
Per le applicazioni reali, la maggior parte degli sviluppatori utilizza il PHPMaillibreria er invece della funzione mail() grezza PHPMailer si autentica con un server SMTP esterno, il che migliora notevolmente la deliverability e semplifica l'invio di allegati e email in formato HTML.
Installalo con Composer, quindi invia la posta tramite una connessione SMTP autenticata e crittografata come mostrato di seguito.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
Rispetto a mail(), PHPMailOffre autenticazione SMTP, crittografia integrata, supporto per gli allegati e una gestione degli errori piรน chiara, motivo per cui รจ la scelta consigliata per le email in produzione.






