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
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.
- Messagerie texte simple avec PHP mail().
- Envoyez du contenu en texte enrichi par courrier.
- Sendmail en PHP avec pièces jointes.
- 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 :
- [email protected]
- Nom <[email protected]>
- [email protected], nom2.domaine.com
- Nom <[email protected]>, Nom2 <[email protected]>
$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.
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 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>
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.
Voir plus
0 commentaire(s)
Laissez votre commentaire à @johnmbiya
Posts similaires
PHP conçu pour le développement Web
Comment envoyer un mail en PHP avec mail(), SMTP, Phpmailer
Comment créer les boutons de partage des liens sur les médias sociaux en php
Questions et réponses d'interview PHP pour 1,2,3,5 ans d'expérience
Catégories
Soyez au courant des dernières tendances
Abonnez-vous pour obtenir les meilleurs articles, tutoriels, astuces et informations !
@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@eric-belone-1655981157 il y a 2 ans
Merci
Répondre