PHP Invio di e-mail - Informazioni di base, maggiori dettagli e un esempio completo


Esempio

Una tipica email ha tre componenti principali:

  1. Un destinatario (rappresentato come un indirizzo email)
  2. Un soggetto
  3. Un corpo di messaggio

L'invio di posta in PHP può essere semplice come chiamare la funzione built-in mail() . mail() richiede fino a cinque parametri, ma i primi tre sono tutto ciò che è necessario per inviare un messaggio di posta elettronica (sebbene i quattro parametri siano comunemente usati come verrà dimostrato di seguito). I primi tre parametri sono:

  1. Indirizzo email del destinatario (stringa)
  2. L'oggetto dell'email (stringa)
  3. Il corpo dell'email (stringa) (ad esempio il contenuto dell'e-mail)

Un esempio minimo sarebbe simile al seguente codice:

mail('recipient@example.com', 'Email Subject', 'This is the email message body');

Il semplice esempio di cui sopra funziona bene in circostanze limitate come l'hardcoding di un avviso e-mail per un sistema interno. Tuttavia, è normale collocare i dati passati come parametri per mail() nelle variabili per rendere il codice più pulito e più facile da gestire (ad esempio, costruire dinamicamente una e-mail dall'invio di un modulo).

Inoltre, mail() accetta un quarto parametro che ti consente di avere intestazioni di posta aggiuntive inviate con la tua email. Queste intestazioni possono consentire di impostare:

  • il nome di From e l'indirizzo email che l'utente vedrà
  • l'indirizzo email Reply-To verrà inviata la risposta dell'utente
  • ulteriori intestazioni non standard come X-Mailer che possono dire al destinatario che questa email è stata inviata tramite PHP
$to      = 'recipient@example.com';             // Could also be $to      = $_POST['recipient'];  
$subject = 'Email Subject';                     // Could also be $subject = $_POST['subject'];  
$message = 'This is the email message body';    // Could also be $message = $_POST['message'];  
$headers = implode("\r\n", [
    'From: John Conde <webmaster@example.com>',
    'Reply-To: webmaster@example.com',
    'X-Mailer: PHP/' . PHP_VERSION
]);

Il quinto parametro opzionale può essere utilizzato per passare altri flag come opzioni della riga di comando al programma configurato per essere utilizzato durante l'invio di posta, come definito dall'impostazione di configurazione sendmail_path . Ad esempio, questo può essere utilizzato per impostare l'indirizzo del mittente della busta quando si utilizza sendmail / postfix con l'opzione -f sendmail.

$fifth  = '-fno-reply@example.com';

Anche se l'uso di mail() può essere abbastanza affidabile, non è assolutamente garantito che verrà inviata un'e- mail() quando viene chiamato mail() . Per vedere se c'è un potenziale errore durante l'invio della tua email, dovresti acquisire il valore di ritorno da mail() . TRUE sarà restituito se la posta è stata accettata con successo per la consegna. Altrimenti, riceverai FALSE .

$result = mail($to, $subject, $message, $headers, $fifth);

NOTA : Sebbene mail() possa restituire TRUE , ciò non significa che l'email è stata inviata o che l'email sarà ricevuta dal destinatario. Indica solo che la posta è stata consegnata con successo al sistema di posta del tuo sistema.

Se desideri inviare un'email HTML, non c'è molto più lavoro che devi fare. Devi:

  1. Aggiungi l'intestazione della MIME-Version
  2. Aggiungi l'intestazione Content-Type
  3. Assicurati che il tuo contenuto email sia HTML
$to      = 'recipient@example.com';                            
$subject = 'Email Subject';                                     
$message = '<html><body>This is the email message body</body></html>';       
$headers = implode("\r\n", [
    'From: John Conde <webmaster@example.com>',
    'Reply-To: webmaster@example.com',
    'MIME-Version: 1.0',
    'Content-Type: text/html; charset=ISO-8859-1',
    'X-Mailer: PHP/' . PHP_VERSION
]);

Ecco un esempio completo di utilizzo della funzione mail() di PHP

<?php

// Debugging tools. Only turn these on in your development environment.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

// Special mail settings that can make mail less likely to be considered spam
// and offers logging in case of technical difficulties.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

// The components of our email

$to      = 'recipient@example.com';
$subject = 'Email Subject';
$message = 'This is the email message body';
$headers = implode("\r\n", [
    'From: webmaster@example.com',
    'Reply-To: webmaster@example.com',
    'X-Mailer: PHP/' . PHP_VERSION
]);

// Send the email

$result = mail($to, $subject, $message, $headers);

// Check the results and react accordingly

if ($result) {
  
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
  
}
else {
  
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
  
}

Guarda anche

Documentazione ufficiale

Stack overflow domande correlate

Mailers alternativi

Email Server

Argomenti correlati