Comment envoyer un mail en PHP avec mail(), SMTP, Phpmailer - Letecode

Comment envoyer un mail en PHP avec mail(), SMTP, Phpmailer

PHP dispose des fonctions qui vous permet d'envoyer facilement des mails depuis votre site web

Jean Claude Mbiya
Jean Claude Mise à jour : 21 décembre 2022 11072 2

Envoyer un courier en PHP est possible avec une seule ligne de code. PHP contient des fonctions de messagerie intégrées pour envoyer du courrier.

Il y a des raisons pour lesquelles je me sens embrassé par cette fonctionnalité PHP. Parce que j'écris beaucoup de code pour envoyer des mails régulièrement. PHP nous fait vraiment gagner du temps avec ses fonctions intégrées.

Voici un exemple :

<?php

    mail('[email protected]', 'Objet du courier', 'Message à envoyer'); 

?>

 

Dans ce tutoriel, nous allons voir comment ajouter du code à sendmail en PHP. Nous verrons ici plusieurs exemples pour enrichir les fonctionnalités avec plus de détails.

La liste des exemples que nous allons voir ci-dessous, couvrira la prise en charge de base et complète de sendmail en PHP.

  1. Messagerie texte simple avec PHP mail().
  2. Envoyez du contenu en texte enrichi par courrier.
  3. Sendmail en PHP avec pièces jointes.
  4. Sendmail en utilisant PHPMailer avec SMTP.

1. PHP mail()

Le PHP mail() consiste à envoyer des mails depuis une application. Voyons les configurations PHP requises pour faire fonctionner la fonction mail(). Aussi, nous verrons ci-dessous la syntaxe et les paramètres communs de cette fonction PHP .

Syntaxe :

mail(

    string $recipient_email,

    string $subject,

    string $message,

    array|string $headers = [],

    string $additional_params = ""

)

Paramètres

$recipient_email

Une ou plusieurs valeurs séparées par des virgules qui correspondent aux adresses e-mail cibles. L'exemple de format des valeurs est le suivant :

$sujet

Objet du courrier. Il doit satisfaire à la RFC 2047 .

$message

Corps du contenu du courrier. Il utilise \r\n pour passer un texte multiligne. Il a une limite de caractères de 70 pour une ligne. Il accepte différents types de contenu en fonction de la spécification dans l'en-tête supplémentaire.

$headers

Il s'agit d'une chaîne ou d'un tableau supplémentaire ajouté à l'en-tête du courrier. À utiliser pour transmettre le tableau de spécifications telles que le type de contenu, le jeu de caractères, etc. C'est un paramètre facultatif. Il utilise \r\n pour ajouter plusieurs en-têtes . Le tableau d'en-tête contient une paire clé-valeur pour spécifier respectivement le nom et la spécification de l'en-tête.

$additional_params

Ceci est également facultatif. Il s'agit de passer des indicateurs supplémentaires comme l'adresse de l'expéditeur de l'enveloppe avec une option de ligne de commande.

Valeurs de retour

Cette fonction renvoie un booléen vrai ou faux en fonction du statut d'envoi du courrier. En recevant boolean true , cela ne signifie pas que le courrier a été envoyé avec succès. Au contraire, cela signifie seulement que la demande d'envoi de courrier est soumise au serveur.

 

PHP sendmail – configurations

Nous devons configurer certaines directives pour que le script de messagerie fonctionne dans votre environnement.

Localisez votre fichier php.ini et définissez les attributs de la fonction de messagerie. L'image ci-dessous montre la configuration PHP de la fonction de messagerie.

php.ini mail config

 

Définissez la configuration du serveur de messagerie et le chemin de sendmail avec cette section du php.ini. Redémarrez ensuite le serveur Web et assurez-vous que les paramètres sont activés via phpinfo().

 

Exemples de Sendmail en PHP

Sendmail en PHP pour envoyer du contenu en clair

Ceci est un court exemple d'envoi de contenu en texte brut via le script PHP. Il définit l'objet du courrier, le message et le paramètre d'e-mail du destinataire sur sendemail en PHP.

Ce programme imprime un texte de réponse basé sur le booléen renvoyé par la fonction mail().

code PHP :

<?php


    $to = '[email protected]';

    $subject = 'Mail envoyé depuis un script PHP';

    $message = 'Contenu text depuis sendmail de php';



  if (mail($to, $subject, $message,)) {

      echo 'Mail envoyé avec succèss.';

    } else {

        echo 'Unable to send mail. Please try again.';

  }

?>

 

Code PHP Sendmail pour envoyer du contenu HTML

Comme dans l'exemple ci-dessus, ce programme utilise également la fonction PHP mail() pour envoyer des e-mails. Il transmet le contenu HTML à la fonction de messagerie.

Pour envoyer du contenu HTML, il définit le type de contenu et d'autres valeurs d'en-tête avec l'en-tête du courrier.

 

code PHP : 

<?php


    $to = '[email protected]';

    $subject = 'Mail sent from sendmail PHP script';

    $from = '[email protected]';

  $headers = "From: $from";

    $headers .= "MIME-Version: 1.0\r\n";

    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";

    $message = '<p><strong>Sendmail in PHP with HTML content. </strong></p>';


    if (mail($to, $subject, $message, $headers)) {

        echo 'Mail sent successfully.';

    } else {

        echo 'Unable to send mail. Please try again.';

  }

?>

Sendmail en PHP pour joindre des fichiers

Ce programme joint un fichier texte avec le contenu de l'e-mail. Il lit un fichier source en utilisant PHP file_get_contents(). Il encode le contenu du fichier et prépare un en-tête de courrier pour joindre un fichier.

Il définit le type de contenu, l'encodage avec le corps du message pour le faire fonctionner. Ce script utilise la variable optionnelle  $header lors de l'exécution de sendmail en PHP.

code PHP :

<?php


    $file = "example.txt";

    $to = '[email protected]';

    $subject = 'Mail sent from sendmail PHP script';

    $content = file_get_contents($file);

    $encodedContent = chunk_split(base64_encode($content));

    $divider = md5(time());

    $headers = "From: TestSupport <[email protected]>\r\n";

    $headers .= "Content-Type: multipart/mixed; boundary=\"" . $divider . "\"\r\n";

    $headers .= "Content-Transfer-Encoding: 7bit\r\n";



    $message = "--" . $divider. "\r\n";


    $message .= "Content-Type: application/octet-stream; name=\"" . $file . "\"\r\n";


    $message .= "Content-Transfer-Encoding: base64\r\n";

    $message .= "Content-Disposition: attachment\r\n";

    $message .= $encodedContent. "\r\n";

    $message .= "--" . $divider . "--";



    if (mail($to, $subject, $message, $headers)) {

        echo 'Mail sent successfully.';

    } else {

        echo 'Unable to send mail. Please try again.';

    }

?>

sendmail with attachement

 

Sendmail sur un formulaire à soumettre

Au lieu de valeurs statiques, nous pouvons également transmettre des valeurs saisies par l'utilisateur au sendmail PHP. Un formulaire HTML peut obtenir les valeurs de l'utilisateur pour envoyer du courrier. Nous avons déjà vu comment envoyer un email de contact via le formulaire.

Cet exemple montre un formulaire qui collecte le nom, l'adresse e-mail et le message de l'utilisateur. Il publie les données du formulaire dans le PHP lors de l'action de soumission.

Le PHP lit les données du formulaire et les utilise pour préparer les paramètres de demande d'envoi de courrier. Il prépare l'en-tête avec l'e-mail « from ». Il définit le corps du courrier avec le message saisi par l'utilisateur.

Tous les champs du formulaire sont obligatoires et la validation se fait par la fonctionnalité par défaut du navigateur.

 

code php :

<?php


if (isset($_POST["submit_btn"])) {


    $to = "[email protected]";

    $subject = 'Mail sent from sendmail PHP script';

    $from = $_POST["email"];

    $message = $_POST["msg"];

    $headers = "From: $from";


    if (mail($to, $subject, $message, $headers)) {

        $responseText = 'Mail sent successfully.';

    } else {

        $responseText = 'Unable to send mail. Please try again.';

  }
}

?>

 

code HTML : 

<html>
<head>

    ....

    <style>

      body {
          font-family: Arial;
          width: 550px;
        }

      .response-ribbon {
          padding: 10px;
          background: #ccc;
          border: #bcbcbc 1px solid;
          margin-bottom: 15px;
          border-radius: 3px;
        }

      input,
      textarea {
          padding: 8px;
          border: 1px solid #ccc;
          border-radius: 5px;
        }

      #Submit-btn {
          background: #1363cc;
          color: #fff;
          width: 150px;
        }




      #email-form {
          border: 1px solid #ccc;
            padding: 20px;

        }

    </style>

</head>


<body>

    <?php 

        if(!empty($responseText)) {

    ?>


    <div class="response-ribbon">

        <?php echo $responseText; ?>

    </div>


    <?php 

        }

    ?>


    <form id="email-form" name="email-form" method="post" action="traitement.php">

        <table width="100%" border="0" align="center" cellpadding="4" cellspacing="1">

            <tr>

                <td>

                    <div class="label">Nom:</div>

                    <div class="field">

                        <input name="name" type="text" id="name" required />

                    </div>

                </td>

            </tr>

            <tr>

                <td>

                  <div class="label">E-mail:</div>

                    <div class="field">

                        <input name="email" type="text" id="email" required />

                    </div>

                </td>

            </tr>

            <tr>

                <td>

                    <div class="label">Message:</div>

                    <div class="field">

                        <textarea name="msg" cols="45" rows="5" id="msg" required></textarea>

                    </div>

                </td>

            </tr>

            <tr>

                <td>

                    <div class="field">

                        <input name="submit_btn" type="submit" id="submit-btn" value="Envoyer" />

                    </div>

                </td>

            </tr>

        </table>

    </form>

</body>

</html>

 

envoi de mail formulaire html

 

PHP sendmail via SMTP

La fonction PHP mail() a certaines limitations. Pour avoir une fonctionnalité à part entière pour envoyer un courrier en PHP, je préfère utiliser la bibliothèque PHPmailer.

Cette bibliothèque est l'une des meilleures qui fournit des utilitaires de messagerie avancés.

Cet exemple utilise un script minimal pour envoyer du courrier en PHP avec PHPMailer via SMTP. Il charge la bibliothèque PHPMailer pour créer et définir l'objet courrier.

L'objet mail est utilisé pour configurer les paramètres de messagerie. Ensuite, il invoque la  méthode send() de la classe PHPMailer pour envoyer du courrier.

Téléchargez PHPMailer depuis Github et placez-le dans le répertoire de cet exemple. Remplacez les configurations SMTP dans le script ci-dessous pour que ce script de messagerie fonctionne.

 

code PHP

<?php

    use PHPMailer\PHPMailer\PHPMailer;

    use PHPMailer\PHPMailer\SMTP;

    use PHPMailer\PHPMailer\Exception;


  require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/Exception.php';
  require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/PHPMailer.php';
    require_once __DIR__ . '/vendor/phpmailer/phpmailer/src/SMTP.php';


    $mail = new PHPMailer(true);

    $mail->SMTPDebug = 0;

    $mail->isSMTP();

    $mail->Host = 'smtp.gmail.com';

    $mail->SMTPAuth = true;

    $mail->Username = "";

    $mail->Password = "";

    $mail->SMTPSecure = "ssl";

  $mail->Port = 465;

    $mail->From = "[email protected]";

    $mail->FromName = "Letecode";


    $mail->addAddress("[email protected]", "recipient name");

    $mail->isHTML(true);

    $mail->Subject = "Mail sent from php send mail script.";

    $mail->Body = "<i>Text content from send mail.</i>";

    $mail->AltBody = "This is the plain text version of the email content";


    try {

        $mail->send();

      echo "Message has been sent successfully";

    } catch (Exception $e) {

        echo "Mailer Error: " . $mail->ErrorInfo;

    }

?>

Fonctions liées à sendmail en PHP

PHP fournit des fonctions de messagerie alternatives à sendmail. Ceux-ci sont énumérés ci-dessous.

  • mb_send_mail() - Il envoie un courrier codé en fonction de la langue configurée avec le paramètre mb_language().
  • imap_mail() – Il permet d'envoyer des mails en PHP avec une gestion correcte des destinataires CC, BCC.

En conclusion

Les exemples d'envoi de courrier ci-dessus fournissent du code pour sendemail en PHP. Il prend en charge l'envoi de divers types de contenu, de pièces jointes par courrier.

L'élaboration de la fonction mail() intégrée à PHP met en évidence la puissance de cette fonction.

J'espère que cet article sera utile pour en savoir plus sur la façon d'envoyer des messages en PHP.

vote
Jean Claude Mbiya
Jean Claude Mbiya

Développeur Web full stack, Développeur Android (Certifié Google AAD) Formateur dans les domaines du numérique, Créateur letecode.com 👨‍💻. Je suis un grand passionné des nouvelles technologies et j'adore partager ce que j'apprend.

0 commentaire(s)

  • Image placeholder
    @thierry-camier-1704468659 il y a 10 mois

    Bonjour Merci pour ces détails. J'utilise ce script sur un serveur ovh. Or les adresses en icloud bloquent : [HM08] Message rejected due to local policy. Une idée ?

    Répondre
  • Image placeholder
    @eric-belone-1655981157 il y a 2 ans

    Merci

    Répondre

Laissez votre commentaire à @johnmbiya

ou pour laisser un commentaire