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.

  • ???? Cosa fa mail(): La funzione mail() invia un'email da uno script, prendendo in input il destinatario, l'oggetto, il messaggio e le intestazioni facoltative.
  • ๐Ÿ“จ Trasporto SMTP: Il servizio di posta elettronica PHP si basa su SMTP, il cui host, porta e autenticazione sono impostati nel file di configurazione php.ini.
  • ๐Ÿ“‹ CC e BCC: Le intestazioni opzionali aggiungono destinatari in copia conoscenza e in copia conoscenza nascosta, mentre il campo CCN (Copia conoscenza nascosta) viene nascosto agli altri destinatari.
  • ๐Ÿ›ก๏ธ Sanifica l'input: La variabile filter_var con FILTER_SANITIZE_EMAIL e FILTER_VALIDATE_EMAIL blocca l'iniezione dell'intestazione dai dati inseriti nel modulo di contatto.
  • ๐Ÿ”’ Assicurate Mail: La crittografia della connessione con SSL o TLS protegge il contenuto dei messaggi impedendone la lettura durante la trasmissione.
  • ๐Ÿงฐ Utilizzare PHPMailsono: PHPMailer aggiunge l'autenticazione SMTP, gli allegati e le email in formato HTML, rendendolo piรน affidabile rispetto alla semplice posta elettronica (raw mail()).
  • ๐Ÿค– Assistenza AI: Gli strumenti di IA possono configurare PHPMaile con SMTP e suggerire soluzioni per evitare che le tue email finiscano nella cartella spam.

PHP Mail

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.

Semplice Mail Transmission Protocollo

  • Fai clic sul menu Trovaโ€ฆ

Semplice Mail Transmission Protocollo

  • Verrร  visualizzata la finestra di dialogo Trova

Semplice Mail Transmission Protocollo

  • Fai clic sul pulsante Trova successivo

Semplice Mail Transmission Protocollo

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:

Semplice Mail Transmission Protocollo

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:

Sanificazione degli input degli utenti di posta elettronica

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.

DOMANDE FREQUENTI

La causa piรน comune รจ la mancanza di un server di posta configurato su localhost. Imposta i valori SMTP corretti in php.ini oppure usa PHPMailUtilizza un account SMTP autenticato. Controlla anche il registro degli errori del server e la cartella spam.

Aggiungi intestazioni che impostano MIME-Version su 1.0 e Content-Type su text/html, quindi inserisci il markup HTML nel corpo del messaggio. PHPMailer gestisce automaticamente questa situazione quando si imposta l'opzione isHTML(true).

La funzione FILTER_SANITIZE_STRING รจ deprecata a partire da PHP 8.1. Utilizzare htmlspecialchars() per eseguire l'escape dell'output per la visualizzazione, oppure un validatore specifico come FILTER_VALIDATE_EMAIL, a seconda che si stia pulendo o verificando il valore.

Sรฌ. Fornisci all'IA l'host SMTP, la porta e il tipo di sicurezza e potrร  generare il codice PHP completo.MailConfigurazione ER con autenticazione, mittente, destinatari e gestione degli errori. Memorizzare le credenziali nelle variabili d'ambiente, non nel codice.

Sรฌ. L'IA puรฒ fornire consigli sui record SPF, DKIM e DMARC, sull'utilizzo di un mittente SMTP autenticato, sull'evitare parole che attivano i trigger di spam e sull'impostazione di un indirizzo mittente valido, per poi aiutarti a testare la deliverability.

Riassumi questo post con: