Envoi d'email authentifié via PHP ou Perl : Différence entre versions

De
Sauter à la navigation Sauter à la recherche
(Page créée avec « Chez HaiSoft, comme la plupart des hébergeurs luttant contre l'envoi de spams, la fonction d'envoi de mails non sécurisée PHP mail() est désactivée. Il faut donc e... »)
 
m
(7 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
+
[[Category:E-mail]]
 
Chez HaiSoft, comme la plupart des hébergeurs luttant contre l'envoi de spams, la fonction d'envoi de mails non sécurisée PHP mail() est désactivée.  
 
Chez HaiSoft, comme la plupart des hébergeurs luttant contre l'envoi de spams, la fonction d'envoi de mails non sécurisée PHP mail() est désactivée.  
  
Ligne 32 : Ligne 32 :
 
Votre script d'envoi SMTP devra faire appel à PHPMailer grâce aux lignes suivantes :
 
Votre script d'envoi SMTP devra faire appel à PHPMailer grâce aux lignes suivantes :
  
<pre>
+
<syntaxhighlight lang="php">
 
use PHPMailer\PHPMailer\PHPMailer;
 
use PHPMailer\PHPMailer\PHPMailer;
 
use PHPMailer\PHPMailer\Exception;
 
use PHPMailer\PHPMailer\Exception;
require 'Exception.php';
+
require 'PHPMailer/Exception.php';
require 'PHPMailer.php';
+
require 'PHPMailer/PHPMailer.php';
require 'SMTP.php';
+
require 'PHPMailer/SMTP.php';
</pre>
+
</syntaxhighlight>
  
 
Si vous avez placé les fichiers précédents dans un dossier différent, il faudra donc adapter le chemin vers ces fichiers.
 
Si vous avez placé les fichiers précédents dans un dossier différent, il faudra donc adapter le chemin vers ces fichiers.
Ligne 45 : Ligne 45 :
 
Ensuite, les paramètres suivants sont nécessaires pour définir les options d'envoi et de connexion SMTP :
 
Ensuite, les paramètres suivants sont nécessaires pour définir les options d'envoi et de connexion SMTP :
  
 
+
<syntaxhighlight lang="php">
<pre>
 
 
$mail = new PHPMailer;
 
$mail = new PHPMailer;
 
$mail->CharSet = 'UTF-8';
 
$mail->CharSet = 'UTF-8';
  
 
$mail->isSMTP(); // Active l'envoi via SMTP
 
$mail->isSMTP(); // Active l'envoi via SMTP
$mail->Host = 'srvXX.haisoft.net'; // À remplacer par le nom de votre serveur SMTP
+
$mail->Host = 'srvXX.haisoft.net'; // Nom du serveur sur lequel vos emails sont hébergés
 
$mail->SMTPAuth = true; // Active l'authentification par SMTP
 
$mail->SMTPAuth = true; // Active l'authentification par SMTP
 
$mail->Username = 'user@example.com'; // Nom d'utilisateur SMTP (votre adresse email complète)
 
$mail->Username = 'user@example.com'; // Nom d'utilisateur SMTP (votre adresse email complète)
Ligne 58 : Ligne 57 :
 
$mail->SMTPSecure = "ssl"; // Utiliser SSL
 
$mail->SMTPSecure = "ssl"; // Utiliser SSL
 
$mail->isHTML(true); // Format de l'email en HTML
 
$mail->isHTML(true); // Format de l'email en HTML
</pre>
+
</syntaxhighlight>
  
 
Voici ensuite les paramètres liés au mail :
 
Voici ensuite les paramètres liés au mail :
  
<pre>
+
<syntaxhighlight lang="php">
 
$mail->From = 'from@example.com'; // L'adresse mail de l'emetteur du mail (en général identique à l'adresse utilisée pour l'authentification SMTP)
 
$mail->From = 'from@example.com'; // L'adresse mail de l'emetteur du mail (en général identique à l'adresse utilisée pour l'authentification SMTP)
 
$mail->FromName = 'Mon Site'; // Le nom de l'emetteur qui s'affichera dans le mail
 
$mail->FromName = 'Mon Site'; // Le nom de l'emetteur qui s'affichera dans le mail
Ligne 75 : Ligne 74 :
 
$mail->Body    = 'Contenu du message en HTML <b>en gras!</b>'; // Le contenu du mail en HTML
 
$mail->Body    = 'Contenu du message en HTML <b>en gras!</b>'; // Le contenu du mail en HTML
 
$mail->AltBody = 'Contenu du message pour les clients non HTML'; // Le contenu du mail au format texte
 
$mail->AltBody = 'Contenu du message pour les clients non HTML'; // Le contenu du mail au format texte
</pre>
+
</syntaxhighlight>
  
 
On effectue ensuite l'envoi avec cette condition :
 
On effectue ensuite l'envoi avec cette condition :
  
<pre>
+
<syntaxhighlight lang="php">
 +
if(isset($_POST['submit']))
 +
{
 +
 
 
if(!$mail->send()) {
 
if(!$mail->send()) {
 
     echo 'Le message ne peut être envoyé.';
 
     echo 'Le message ne peut être envoyé.';
Ligne 86 : Ligne 88 :
 
     echo 'Message envoyé';
 
     echo 'Message envoyé';
 
}
 
}
</pre>
+
 
 +
}
 +
</syntaxhighlight>
  
 
<h2>Intégration de PHPMailer</h2>
 
<h2>Intégration de PHPMailer</h2>
Ligne 93 : Ligne 97 :
 
Il suffit ensuite d'appeler ce script dans votre formulaire HTML (bouton valider ou autre), via <code>action=</code>, par exemple: <code>"action=mailer.php"</code>.
 
Il suffit ensuite d'appeler ce script dans votre formulaire HTML (bouton valider ou autre), via <code>action=</code>, par exemple: <code>"action=mailer.php"</code>.
  
 
+
<syntaxhighlight lang="php">
<pre>
 
 
<?php
 
<?php
 
// Fichiers requis :
 
// Fichiers requis :
Ligne 100 : Ligne 103 :
 
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/PHPMailer.php
 
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/PHPMailer.php
 
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/SMTP.php
 
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/SMTP.php
 +
//=====Appel des fichiers requis
 +
    use PHPMailer\PHPMailer\PHPMailer;
 +
    use PHPMailer\PHPMailer\Exception;
 +
    require 'PHPMailer/Exception.php';
 +
    require 'PHPMailer/PHPMailer.php';
 +
    require 'PHPMailer/SMTP.php';
  
 
//=====Configuration des paramètres d'expédition
 
//=====Configuration des paramètres d'expédition
Ligne 126 : Ligne 135 :
  
 
//=====Fonction d'envoi du mail - Rien à configurer ici
 
//=====Fonction d'envoi du mail - Rien à configurer ici
        use PHPMailer\PHPMailer\PHPMailer;
 
        use PHPMailer\PHPMailer\Exception;
 
        require 'Exception.php';
 
        require 'PHPMailer.php';
 
        require 'SMTP.php';
 
 
 
         $email = new PHPMailer;
 
         $email = new PHPMailer;
 
         $email->CharSet = 'UTF-8';
 
         $email->CharSet = 'UTF-8';
Ligne 140 : Ligne 143 :
 
         $email->Username = $username;
 
         $email->Username = $username;
 
         $email->Password = $password;
 
         $email->Password = $password;
         $email->Port = 25;
+
         $email->Port = 465;
 +
        $email->SMTPSecure = "ssl";
 
         $email->isHTML(true);
 
         $email->isHTML(true);
  
Ligne 152 : Ligne 156 :
 
         $email->AltBody = $body;
 
         $email->AltBody = $body;
  
 +
if(isset($_POST['submit']))
 +
{
 
//=====Envoi de l'e-mail.
 
//=====Envoi de l'e-mail.
 
         if(!$email->send()) {
 
         if(!$email->send()) {
Ligne 162 : Ligne 168 :
 
         }
 
         }
 
//==========
 
//==========
 
+
}
 
?>
 
?>
</pre>
+
</syntaxhighlight>
  
 
Ici, seules les 8 premières variables doivent être configurées
 
Ici, seules les 8 premières variables doivent être configurées
Ligne 178 : Ligne 184 :
 
</ul>
 
</ul>
  
Votre formulaire d'origine doit donc indiquer le nom de ce script dans le paramètre "action=".
+
<h3>Résumé</h3>
 +
 
 +
Vous disposerez donc au total de 5 fichiers :
 +
- les 3 fichiers de PHPMailer ;
 +
- le script (plus haut) à copier/coller (nommé par exemple "mailer.php") ;
 +
- la page de votre formulaire de contact (nommée par exemple "contact.html") ;
 +
 
 +
Dans contact.html, vous devez avoir un formulaire ressemblant à ceci :
 +
<syntaxhighlight lang="html">
 +
<form action="mailer.php" method="post">
 +
  <div>
 +
    <label for="email">Votre email : </label>
 +
    <input type="email" name="email" id="email" required>
 +
  </div>
 +
  <div>
 +
    <label for="name">Votre nom : </label>
 +
    <input type="text" name="name" id="name" required>
 +
  </div>
 +
  <div>
 +
    <label for="message">Votre message : </label>
 +
    <textarea name="message" id="message" required></textarea>
 +
  </div>
 +
  <div>
 +
    <input type="submit" value="Envoyer">
 +
  </div>
 +
</form>
 +
</syntaxhighlight>
  
Merci
+
La première ligne avec "form action=" fait donc appel au script PHP.
  
 
<h1>Module Perl "Net::SMTP"</h1>
 
<h1>Module Perl "Net::SMTP"</h1>
Ligne 186 : Ligne 218 :
 
Voici un script Perl vous permettant l'envoi d'email via SMTP :
 
Voici un script Perl vous permettant l'envoi d'email via SMTP :
  
<pre>
+
<syntaxhighlight lang="perl">
 
#!/usr/bin/perl
 
#!/usr/bin/perl
  
Ligne 219 : Ligne 251 :
  
 
$smtp->quit();
 
$smtp->quit();
</pre>
+
</syntaxhighlight>

Version du 15 juillet 2022 à 08:41

Chez HaiSoft, comme la plupart des hébergeurs luttant contre l'envoi de spams, la fonction d'envoi de mails non sécurisée PHP mail() est désactivée.

Il faut donc envoyer ses emails en SMTP avec authentification. Afin de mettre en place un envoi d'email via SMTP sur un site ne disposant pas de plugin dédié (comme Easy WP SMTP pour Wordpress par exemple), on peut utiliser différentes solutions.

Nous en verrons ici deux : PHPMailer et le module Perl "Net::SMTP".

PHPMailer

De nombreux modules d'envoi PHP comme Easy WP SMTP sont bases sur PHPMailer car son fonctionnement est simple et efficace.

Nous expliquons ici comment le mettre en place, et fournissons un script prêt à l'emploi, à modifier uniquement pour adapter à votre configuration SMTP.

Difficulté : Moyenne

Installation de PHPMailer

Dans votre hébergement, il faudra télécharger ces trois fichiers de PHPMailer et les placer à la racine de l'hébergement (dans "httpdocs") dans un dossier appelé "PHPMailer" :

Fonctionnement de PHPMailer

Si vous souhaitez utiliser notre script type, passez directement au point suivant "Intégration de PHPMailer".

Appel de PHPMailer

Votre script d'envoi SMTP devra faire appel à PHPMailer grâce aux lignes suivantes :

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/Exception.php';
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';

Si vous avez placé les fichiers précédents dans un dossier différent, il faudra donc adapter le chemin vers ces fichiers.

Configuration de l'envoi PHPMailer

Ensuite, les paramètres suivants sont nécessaires pour définir les options d'envoi et de connexion SMTP :

$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';

$mail->isSMTP();					// Active l'envoi via SMTP
$mail->Host = 'srvXX.haisoft.net';			// Nom du serveur sur lequel vos emails sont hébergés
$mail->SMTPAuth = true;					// Active l'authentification par SMTP
$mail->Username = 'user@example.com';			// Nom d'utilisateur SMTP (votre adresse email complète)
$mail->Password = 'secret';				// Mot de passe de l'adresse email indiquée précédemment
$mail->Port = 465;					// Port SMTP
$mail->SMTPSecure = "ssl";				// Utiliser SSL
$mail->isHTML(true);					// Format de l'email en HTML

Voici ensuite les paramètres liés au mail :

$mail->From = 'from@example.com';			// L'adresse mail de l'emetteur du mail (en général identique à l'adresse utilisée pour l'authentification SMTP)
$mail->FromName = 'Mon Site';				// Le nom de l'emetteur qui s'affichera dans le mail
$mail->addAddress('joe@example.net');			// Un premier destinataire
$mail->addAddress('ellen@example.com');			// Un second destifataire (facultatif)
							// Possibilité de répliquer la ligne pour plus de destinataires
$mail->addReplyTo('info@example.com');			// Pour ajouter l'adresse à laquelle répondre (en général celle de la personne ayant rempli le formulaire)
$mail->addCC('cc@example.com');				// Pour ajouter un champ Cc
$mail->addBCC('bcc@example.com');			// Pour ajouter un champ Cci

$mail->Subject = 'Sujet du mail';			// Le sujet de l'email
$mail->Body    = 'Contenu du message en HTML <b>en gras!</b>';		// Le contenu du mail en HTML
$mail->AltBody = 'Contenu du message pour les clients non HTML';	// Le contenu du mail au format texte

On effectue ensuite l'envoi avec cette condition :

if(isset($_POST['submit']))
{

if(!$mail->send()) {
    echo 'Le message ne peut être envoyé.';
    echo 'Erreur: ' . $mail->ErrorInfo;
} else {
    echo 'Message envoyé';
}

}

Intégration de PHPMailer

Voici un script type à copier dans un nouveau fichier (par exemple "mailer.php").
Il suffit ensuite d'appeler ce script dans votre formulaire HTML (bouton valider ou autre), via action=, par exemple: "action=mailer.php".

<?php
// Fichiers requis :
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/Exception.php
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/PHPMailer.php
// https://raw.githubusercontent.com/PHPMailer/PHPMailer/master/src/SMTP.php
//=====Appel des fichiers requis
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    require 'PHPMailer/Exception.php';
    require 'PHPMailer/PHPMailer.php';
    require 'PHPMailer/SMTP.php';

//=====Configuration des paramètres d'expédition
    //=====Utilisateur SMTP (Adresse email complète existante sur le serveur)
    $username = "Adresse existante sur le serveur";
    //=====Mot de passe de l'adresse
    $password = "";
    //=====Nom du serveur sur lequel vos emails sont hébergés
    $smtphost = "srvXX.haisoft.net";

//=====Paramètres de contenu du mail
    //=====Adresse de destination du message (vous-meme pour un formulaire de contact).
    $to = "Adresse sur le serveur ou externe";
    //=====Définition du sujet de l'email.
    $subject = "Nouveau message sur votre site";
    //=====Définition des variables à récupérer depuis votre formulaire
    $email_auteur = $_POST['VARIABLE1'];
    $nom_auteur = $_POST['VARIABLE2'];
    $message = $_POST['VARIABLE3'];
    //=====Déclaration des messages au format texte
    $body = "Un nouveau message vous a été envoyé sur votre site :<br /><br />
                Auteur : ".$nom_auteur."<br />
                Mail : ".$email_auteur."<br />
                Contenu : ".$message;
    //==========

//=====Fonction d'envoi du mail - Rien à configurer ici
        $email = new PHPMailer;
        $email->CharSet = 'UTF-8';

        $email->isSMTP();
        $email->Host = $smtphost;
        $email->SMTPAuth = true;
        $email->Username = $username;
        $email->Password = $password;
        $email->Port = 465;
        $email->SMTPSecure = "ssl";
        $email->isHTML(true);

        $email->From = $username;
        $email->FromName = $nom_auteur;
        $email->addAddress($to);
        $email->addReplyTo($email_auteur, $nom_auteur);

        $email->Subject = $subject;
        $email->Body    = $body;
        $email->AltBody = $body;

if(isset($_POST['submit']))
{
//=====Envoi de l'e-mail.
        if(!$email->send()) {
            echo 'Le message ne peut être envoyé.';
            echo 'Erreur: ' . $email->ErrorInfo;
        } else {
            echo 'Merci, votre message a bien été envoyé.<br />';
            echo 'Vous allez être redirigé vers la page d\'accueil du site.<br />';
            header('Refresh: 5; URL=http://');
        }
//==========
}
?>

Ici, seules les 8 premières variables doivent être configurées

  • L'adresse email expéditrice
  • Le mot de passe
  • Le nom de serveur
  • L'adresse du destinataire
  • Le sujet
  • L'email de l'auteur (configuré pour être récupéré depuis le formulaire via POST : Il faudra juste adapter le nom de la variable à celle de votre formulaire)
  • Le nom de l'auteur (même instruction)
  • Le message (même instruction)

Résumé

Vous disposerez donc au total de 5 fichiers : - les 3 fichiers de PHPMailer ; - le script (plus haut) à copier/coller (nommé par exemple "mailer.php") ; - la page de votre formulaire de contact (nommée par exemple "contact.html") ;

Dans contact.html, vous devez avoir un formulaire ressemblant à ceci :

<form action="mailer.php" method="post">
  <div>
    <label for="email">Votre email : </label>
    <input type="email" name="email" id="email" required>
  </div>
  <div>
    <label for="name">Votre nom : </label>
    <input type="text" name="name" id="name" required>
  </div>
  <div>
    <label for="message">Votre message : </label>
    <textarea name="message" id="message" required></textarea>
  </div>
  <div>
    <input type="submit" value="Envoyer">
  </div>
</form>

La première ligne avec "form action=" fait donc appel au script PHP.

Module Perl "Net::SMTP"

Voici un script Perl vous permettant l'envoi d'email via SMTP :

#!/usr/bin/perl

$username = 'expediteur@exemple.tld';   # Adresse existante sur le serveur
$password = 'xxxxxxxx';                 # Mot de passe de l'adresse email
$smtphost = 'srvXX.haisoft.net';        # Nom du serveur sur lequel vos emails sont hébergés

$to = 'destinataire@exemple.tld';       # Destinataire du mail
$subject = 'Nouveau message';           # Sujet du mail
$body = 'Contenu du mail';              # Contenu du mail


use Net::SMTP;

my $smtp = Net::SMTP->new($smtphost,
        Port => 25);
$smtp->auth ( $username, $password ) or die "Erreur d'authentification\n";

$smtp->mail($username);
if ($smtp->to($to)) {
        $smtp->data();
        $smtp->datasend("To: <$username> \n");
        $smtp->datasend("From: <$to> \n");
        $smtp->datasend("Content-Type: text/html \n");
        $smtp->datasend("Subject: $subject");
        $smtp->datasend("\n");
        $smtp->datasend($body);
        $smtp->dataend();
} else {
        print "Error: ", $smtp->message();
}

$smtp->quit();