Comment envoyer un mail en PHP avec PHPMailer ?

envoyer un mail avec php
4.7/5 - (12 votes)

Comment envoyer un mail en PHP ?

 

PHP possède plusieurs fonctions qui facilitent l’envoi d’e-mails. La première et la plus commune est la fonction mail(), qui prend en compte le destinataire, l’objet de l’e-mail, le corps du message, les en-têtes et d’autres paramètres optionnels pour envoyer un courrier à un utilisateur spécifique.

Une autre fonction que l’on trouve souvent en PHP est la fonction imap_mail(), qui gère des connexions IMAP aux serveurs de messagerie et fournit des services pour créer et envoyer des e-mails.

 

 

Quelle fonction choisir pour envoyer un mail en PHP ?

 

Chaque fonction présente ses propres avantages et inconvénients. Dans la plupart des cas, la fonction mail() offre une solution clé en main plus simple que celle fournie par imap_mail().

Cependant, si vous avez besoin de contrôler étroitement l’en-tête et le contenu du message, vous devriez envisager d’utiliser la fonction imap_mail(). Si les exigences ne sont pas claires, il est recommandé de contacter votre hébergeur ou administrateur système afin qu’ils puissent vous aider à prendre une décision éclairée sur quelle méthode est la plus appropriée.

 

 

Exemple de mail avec la fonction mail() de PHP

 


  $to = "Destinataire@gmail.com";
  $subject = "Test d'envoi d'email en PHP";
  $message = "Ceci est un test d'envoi d'email en PHP.";

  $headers = "From: expéditeur@example.com";

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

    echo "L'email a été envoyé.";

  } else {

    echo "Une erreur est survenue lors de l'envoi de l'email.";

  }

 

Exemple de mail avec le fonction imap_mail() de PHP

 


  $to = "Destinataire@gmail.com";
  $subject = "Test d'envoi d'email en PHP";
  $message = "Ceci est un test d'envoi d'email en PHP.";
  $headers = "From: expéditeur@example.com";

  $additional_parameters = "-fexpéditeur@example.com";

  if (imap_mail($to, $subject, $message, $headers, $additional_parameters)) {

    echo "L'email a été envoyé.";

  } else {

    echo "Une erreur est survenue lors de l'envoi de l'email.";

  }

 

 

Existe t-il des alternatives à la fonction mail() et imap_mail() de PHP ?

 

Il est généralement recommandé d’utiliser une librairie de PHP telle que PHPMailer ou SwiftMailer pour envoyer des emails plutôt que d’utiliser la fonction mail() ou imap_mail() intégrées à PHP.

Ces librairies offrent des fonctionnalités supplémentaires telles que la gestion des pièces jointes, l’envoi de emails en HTML et en texte brut, ainsi qu’une gestion des erreurs plus robuste.

Si vous décidez tout de même d’utiliser la fonction mail() pour envoyer des emails, voici quelques points à prendre en compte:

  • La fonction mail() est très simple à utiliser, mais elle n’offre pas de nombreuses fonctionnalités avancées.
  • Cette fonction est souvent bloquée par les hébergeurs pour des raisons de sécurité (spam)
  • La fonction imap_mail() est basée sur la bibliothèque IMAP de PHP, qui n’est pas incluse dans la distribution de PHP de base. Il est donc nécessaire que vous ayez la bibliothèque IMAP installée sur votre serveur pour utiliser cette fonction.
  • imap_mail() est considérée comme obsolète à partir de PHP 5.5.0 et a été supprimée dans PHP 7.0.0, il est donc préférable de ne pas l’utiliser.

Il est également important de noter que l’envoi de email est soumis à des règles et des politiques très strictes pour éviter le spam. Il est donc conseillé d’utiliser un service SMTP externe tel que celui de google (Google SMTP) pour envoyer les email qui garantira des meilleures performances, et une meilleur conformité à ces règles et politiques.

 

 

Utiliser PHPMailer pour l’envoi de vos mails en PHP avec pièce jointe

 

Il existe plusieurs façons d’installer PHPMailer sur un serveur FTP, mais voici une méthode courante :

 

  1. Téléchargez la dernière version de PHPMailer sur GitHub : https://github.com/PHPMailer/PHPMailer/releases
  2. Décompressez le fichier téléchargé sur votre ordinateur.
  3. Utilisez un client FTP (comme FileZilla) pour vous connecter à votre serveur et accéder à la racine de votre projet.
  4. Ajoutez le répertoire src de PHPMailer à votre projet en utilisant votre client FTP.
  5. Incluez les fichiers PHPMailer dans votre script PHP en utilisant les instructions require ou include

 

Attention, si vous souhaitez utiliser le serveur SMTP Gmail, vous allez devoir générer un mot de passe pour votre application car l’option permettant l’autorisation ds applications non sécurisés à été supprimée le 30 mail 2022.

Pour cela, rendez vous dans les paramètres de votre compte Google et activez l’authentification à 2 facteurs si ce n’est pas déjà fait.

 

autoriser application Gmail pour envoi de mail en php

Donnez un nom à votre application comme par exemple « PhpMailer domaine.com » et notez bien le mot de passe qui sera affiché à l’écran, c’est ce dernier que vous allez devoir mettre dans votre code à la place de celui que vous utilisez pour vous connecter à votre compte Gmail.

 

 


  require 'src/PHPMailer.php';
  require 'src/SMTP.php';
  require 'src/Exception.php';

  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\SMTP;
  use PHPMailer\PHPMailer\Exception;

  $mail = new PHPMailer(true);

  try {

    // Server settings
    $mail->CharSet = 'UTF-8';
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;           // Enable verbose debug output
    $mail->isSMTP();                      // Send using SMTP
    $mail->Host    = 'smtp.gmail.com';          // Set the SMTP server to send through
    $mail->SMTPAuth  = true;                  // Enable SMTP authentication
    $mail->Username  = 'votrecomtpe@gmail.com';           // SMTP username
    $mail->Password  = 'mot de passe généré par Google';                // SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;     // Enable TLS encryption; PHPMailer::ENCRYPTION_SMTPS  also accepted
    $mail->Port    = 587;                  // TCP port to connect to

    //Recipients
    $mail->setFrom(expéditeur@gmail.com', 'Mailer');
    $mail->addAddress('destinataire@gmail.com', 'Name');   // Add a recipient

    // Attachments
    $mail->addAttachment('VOTRE PIECE JOINTE.zip');     // Add attachments
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');  // Optional name

    // Content
    $mail->isHTML(true);                 // Set email format to HTML
    $mail->Subject = 'Test d\'envoi d\'email en PHP avec pièce jointe';
    $mail->Body  = 'Voici un test d\'envoi d\'email avec une pièce jointe en utilisant PHPMailer.';
    $mail->AltBody = 'Voici un test d\'envoi d\'email avec une pièce jointe en utilisant PHPMailer.';

    $mail->send();

    echo 'Le message a été envoyé.';

  } catch (Exception $e) {

    echo "Une erreur est survenue : {$mail->ErrorInfo}";

  }