8768 sujets

Développement web côté serveur, CMS

Bonjour.
Voulant utiliser PHPMailer, je rencontre un message d'erreur que voici:
Message body empty
J'ai obtenu les informations pour créer ce projet sur ce site qui me semble sérieux:
https://analyse-innovation-solution.fr/publication/fr/php/comment-envoyer-un-mail-en-php
En ce qui me concerne j'ai créée à la racine de mon site un fichier nommé send_email.php inspiré du site ci dessus que voici:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = 'XXXXXXXXX.fr';               //Adresse IP ou DNS du serveur SMTP
$mail->Port = 465;                          //Port TCP du serveur SMTP
$mail->SMTPAuth = 1;                        //Utiliser l'identification
$mail->CharSet = 'UTF-8';

if($mail->SMTPAuth){
   $mail->SMTPSecure = 'ssl';               //Protocole de sécurisation des échanges avec le SMTP
   $mail->Username   =  'xxxxx@xxxxxxxx.fr';    //Adresse email à utiliser
   $mail->Password   =  'xxxxxxxxxxxxxxxxx';         //Mot de passe de l'adresse email à utiliser
}

$mail->From       = trim($_POST["email_from"]);                //L'email à afficher pour l'envoi
$mail->FromName   = trim($_POST["email_from_alias"]);          //L'alias de l'email de l'emetteur

$mail->AddAddress(trim($_POST["email_to"]));

$mail->Subject    =  $_POST["object"];                      //Le sujet du mail
$mail->WordWrap   = 50; 			       //Nombre de caracteres pour le retour a la ligne automatique
$mail->AltBody = $_POST["body"]; 	       //Texte brut
$mail->IsHTML(false);                                  //Préciser qu'il faut utiliser le texte brut

if (!$mail->send()) {
      echo $mail->ErrorInfo;
} else{
      echo 'Message bien envoyé';
}
?>

Je pense que le message d'erreur aurait un lien avec cette ligne:
$mail->AltBody = $_POST["body"];


Qu'en pensez vous?
Merci.
Smiley smile
Salut,

Il ne faut pas faire de messages en doublon sur le forum : https://forum.alsacreations.com/topic-1-89274-1-Envoi-e-mail-avec-PHPMailer.html [doublon supprimé merci ! Laurent]

Il faudrait regarder ce que contient la variable $_POST["body"]; (pour être sur que c'est bien du texte brut)

Comment accèdes tu a cette page ? Tu passe bien par un formulaire qui à cette page en action et que va remplir la variable $_POST["body"]; ?


Ici https://github.com/PHPMailer/PHPMailer , on voit qu'il y a 2 variables en fonction que cela soit la version brut ou non. Je ne sais pas si il faut obligatoirement remplir l'attribut Body ou pas (je suppose que non mais j'envisage des pistes potentiels)


    $mail->isHTML(true);                                  //Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

Modifié par _laurent (15 Feb 2022 - 15:05)
Le doublons => il s'agit d'une erreur de ma part.
La variable $_POST["body"] est en texte brut.
"Je ne sais pas si il faut obligatoirement remplir l'attribut Body ou pas"
Je ne possède pas cette ligne:
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';

Mais celles ci:
$mail->Subject    =  $_POST["object"];                      //Le sujet du mail
$mail->WordWrap   = 50; 			       //Nombre de caracteres pour le retour a la ligne automatique
$mail->AltBody = $_POST["body"]; 	       //Texte brut
$mail->IsHTML(false);                                  //Préciser qu'il faut utiliser le texte brut


Voici le script du fichier form_email.html :
<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Envoi e-mail</title>
</head>
<body>
<form method="post" action="send_email.php"> 
 	<input type="email" name="email_to" maxlength="255" placeholder="Email du destinataire"/>
	<input type="email" name="email_from" maxlength="255" placeholder="Email de l'emetteur" />
	<input type="text" name="email_from_alias" maxlength="255" placeholder="Alias de l'email de l'emetteur" />
	<input type="text" name="object" maxlength="255" placeholder="Objet de l'email" />
    <textarea name="body">		
	</textarea>
	<input type="submit" value="Submit"/>
</form>
</body>
</html>

Pourrait il s'adapter à ce qui est fournit ici:
https://github.com/PHPMailer/PHPMailer[/url]
Ainsi que mon fichier send_email.php présenté ci dessus.
?
Oui j'ai bien vu que tu ne possèdes pas la ligne avec ->Body, et seulement celle avec ->AltBody.
Sauf que pour moi Alt c'est signe d'une "alternative", mais selon comment c'est fait, tu es parfois obligé de remplir le "normal", et éventuellement une "alternative" dans un second temps.

Pour le formulaire cela m'a l'air de correspondre, c'était pour être sur qu'il y en avait bien un.
Cette ligne que voici:
$mail->AltBody = $_POST["body"]; 

Correspond à celle ci du fichier HTML/
<textarea name="body">

Et pour définir si il s'agit d'un texte brut ou d'une texte HTML c'est celle ci qui la défini:
$mail->IsHTML(false); 

Dans cet exemple en texte brut.
Ainsi d'après moi se serait ce qui dépend de $mail->AltBody qui serait en cause.