PHP Envoi d'e-mails - Les bases, plus de détails et un exemple complet


Exemple

Un e-mail typique comporte trois composants principaux:

  1. Un destinataire (représenté comme une adresse e-mail)
  2. Un sujet
  3. Un corps de message

L'envoi de courrier en PHP peut être aussi simple que d'appeler la fonction intégrée mail() . mail() prend jusqu'à cinq paramètres, mais les trois premiers sont tout ce qui est requis pour envoyer un courrier électronique (bien que les quatre paramètres soient couramment utilisés comme cela sera démontré ci-dessous). Les trois premiers paramètres sont:

  1. L'adresse email du destinataire (chaîne)
  2. Le sujet de l'e-mail (chaîne)
  3. Le corps de l'e-mail (chaîne) (par exemple le contenu de l'e-mail)

Un exemple minimal ressemblerait au code suivant:

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

L'exemple simple ci-dessus fonctionne bien dans des circonstances limitées, telles que le codage en dur d'une alerte par courrier électronique pour un système interne. Cependant, il est courant de placer les données transmises en tant que paramètres pour mail() variables mail() afin de rendre le code plus propre et plus facile à gérer (par exemple, générer dynamiquement un courrier électronique à partir d'une soumission de formulaire).

En outre, mail() accepte un quatrième paramètre qui vous permet d'envoyer des en-têtes de courrier supplémentaires avec votre courrier électronique. Ces en-têtes peuvent vous permettre de définir:

  • la From nom et adresse e - mail , l'utilisateur verra
  • la Reply-To l' adresse e - mail de réponse de l'utilisateur sera envoyé à
  • autres en-têtes non-standards comme X-Mailer qui peuvent dire au destinataire que cet email a été envoyé via 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
]);

Le cinquième paramètre facultatif peut être utilisé pour transmettre des indicateurs supplémentaires en tant qu'options de ligne de commande au programme configuré pour être utilisé lors de l'envoi de courrier, comme défini par le paramètre de configuration sendmail_path . Par exemple, cela peut être utilisé pour définir l'adresse de l'expéditeur de l'enveloppe lors de l'utilisation de sendmail / postfix avec l'option -f sendmail.

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

Bien que l'utilisation de mail() puisse être assez fiable, il n'est en aucun cas garanti qu'un courrier électronique soit envoyé lors de l'appel de mail() . Pour voir s'il y a une erreur potentielle lors de l'envoi de votre courrier électronique, vous devez capturer la valeur de retour de mail() . TRUE sera renvoyé si le courrier a été accepté avec succès pour la livraison. Sinon, vous recevrez FALSE .

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

REMARQUE : Bien que mail() puisse renvoyer TRUE , cela ne signifie pas que l'e-mail a été envoyé ou que l'e-mail sera reçu par le destinataire. Cela indique uniquement que le courrier a été transmis avec succès au système de messagerie de votre système.

Si vous souhaitez envoyer un e-mail HTML, vous n'avez pas beaucoup de travail à faire. Tu dois:

  1. Ajoutez l'en MIME-Version tête MIME-Version
  2. Ajouter l'en Content-Type tête Content-Type
  3. Assurez-vous que votre contenu e-mail est 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
]);

Voici un exemple complet d'utilisation de la fonction mail() de 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.
  
}

Voir également

Documentation officielle

Questions relatives au débordement de pile

Mailers alternatifs

Serveurs de messagerie

Rubriques connexes