8767 sujets
Développement web côté serveur, CMS
Salut salut, on manque cruellement de contexte pour pouvoir t'aider.
IONOS a probablement mis à jour la version de PHP sur ton serveur. Va dans ton panneau de contrôle IONOS et cherche la section qui indique la version PHP active (souvent sous "Sites Web" ou "PHP settings"). Note bien la version, car ça peut être utile pour la suite.
Pour voir ce qui ne va pas exactement, tu peux activer l’affichage des erreurs sur ta page de formulaire. Ajoute ces lignes au début du fichier PHP qui gère ton formulaire :
Si le problème vient d’une incompatibilité avec la nouvelle version de PHP (comme PHP 8.x), il peut y avoir des fonctions obsolètes ou des changements dans la façon dont PHP traite certaines opérations. Si tu me montres ton code, on pourra te guider pour le mettre à jour.
IONOS a probablement mis à jour la version de PHP sur ton serveur. Va dans ton panneau de contrôle IONOS et cherche la section qui indique la version PHP active (souvent sous "Sites Web" ou "PHP settings"). Note bien la version, car ça peut être utile pour la suite.
Pour voir ce qui ne va pas exactement, tu peux activer l’affichage des erreurs sur ta page de formulaire. Ajoute ces lignes au début du fichier PHP qui gère ton formulaire :
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Si le problème vient d’une incompatibilité avec la nouvelle version de PHP (comme PHP 8.x), il peut y avoir des fonctions obsolètes ou des changements dans la façon dont PHP traite certaines opérations. Si tu me montres ton code, on pourra te guider pour le mettre à jour.
Salut Jencal !
Rapide et sympa
Voici le code
Je n'y comprends rien, désolé
Merci
Rapide et sympa
Voici le code
<?php
// ---------------------------------
// ENVOI du FORMULAIRE - ajax
// ---------------------------------
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
// -----------------
// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "dm15517@gmail.com"; // receiver email
$email_subject = "New Message Received";
// -----------------
// fonctions utiles
if( !function_exists('show_msg_error') )
{
function show_msg_error($error)
{
// your error code can go here
echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
echo "<p>Sorry, but there were error(s) found:</p>";
echo "<p>".$error."</p>";
echo "<p>Please correct them and try again</p>";
echo "</div>";
exit;
}
}
// ---------
if( !function_exists('clean_string') )
{
function clean_string($string)
{
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
}
// -----------------
// Récupération des champs du formulaire
$first_name = ( !empty($_POST['first_name']) ) ? $_POST['first_name'] : ''; // required
$last_name = ( !empty($_POST['last_name']) ) ? $_POST['last_name'] : ''; // required
$email = ( !empty($_POST['email']) ) ? $_POST['email'] : ''; // required
$comments = ( !empty($_POST['comments']) ) ? $_POST['comments'] : ''; // required
// -----------------
// Gestion des erreurs
$error_message = '';
// On vérifie que tous les champs obligatoires sont remplis
// ---------
if( empty($first_name) )
{
$error_message .= 'Your First Name is mandatory<br />';
}
// ---------
if( empty($last_name) )
{
$error_message .= 'Your Last Name is mandatory<br />';
}
// ---------
if( empty($email) )
{
$error_message .= 'Your Email address is mandatory<br />';
}
elseif( !empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) )
{
$error_message .= 'A valid Email address is mandatory<br />';
}
// ---------
if( empty($comments) )
{
$error_message .= 'A Question or Comment is mandatory<br />';
}
// -----------------
// ERREUR ?
if( !empty($error_message) )
{
show_msg_error($error_message);
}
// -----------------
// PAS d erreur : envoi par mail
else {
$email_from = $email;
$email_message = "Form details below.\n\n";
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
if( mail($email_to, $email_subject, $email_message, $headers) )
{
echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:green;border:1px solid green;border-radius:3px;\">";
echo "<p><b>Thank you. Your message has been correctly sent.</b></p>";
echo "</div>";
exit;
} else {
echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
echo "<p>An error occured during sending.</p>";
echo "<p>Please try again, or send it to: ".$email_to."</p>";
echo "</div>";
exit;
}
}
// -----------------
}
// ---------------------------------
Je n'y comprends rien, désolé
Merci
Bonsoir,
>> Mais que dois-je mettre comme adresse mail après le "FROM" ?
L'entête From contient le nom et l’adresse email de l’expéditeur à l’origine du message.
Voir https://www.mailjet.com/fr/blog/delivrabilite/lecture-entete-email/#chapter-3
https://www.dmarc.fr/blog/decouvrir-la-source-d-un-e-mail-examen-des-differents-champs-from
>> Mais que dois-je mettre comme adresse mail après le "FROM" ?
L'entête From contient le nom et l’adresse email de l’expéditeur à l’origine du message.
Voir https://www.mailjet.com/fr/blog/delivrabilite/lecture-entete-email/#chapter-3
https://www.dmarc.fr/blog/decouvrir-la-source-d-un-e-mail-examen-des-differents-champs-from
>> Je ne fais que recevoir
Pour répondre au mail que vous recevez vous devez connaitre l'adresse mail de la personne qui vous envoie un message.
>> Comment puis-je connaître l'expéditeur ?
L'utilisateur qui remplit le formulaire de contact fourni son adresse mail pour pouvoir recevoir un réponse.
C'est la Ligne suivante dans le code plus haut.
Soit le contenu de la variable $_POST['email'] fournie par l'utilisateur.
Avez vous lula documentation php.net/mail ?
Pour répondre au mail que vous recevez vous devez connaitre l'adresse mail de la personne qui vous envoie un message.
>> Comment puis-je connaître l'expéditeur ?
L'utilisateur qui remplit le formulaire de contact fourni son adresse mail pour pouvoir recevoir un réponse.
C'est la Ligne suivante dans le code plus haut.
$email = ( !empty($_POST['email']) ) ? $_POST['email'] : '';
Soit le contenu de la variable $_POST['email'] fournie par l'utilisateur.
Avez vous lula documentation php.net/mail ?
Pour mieux comprendre je t'invite à regarder 2 vidéos, une de PrimFX ancienne mais toujours valable, et une autre plus compète de Nouvelle Techno.
https://www.youtube.com/watch?v=c4C0LXmSHhE
https://www.youtube.com/watch?v=SXKzTjxXW88
Les autres vidéos de ces 2 chaines sont intéressantes également.
https://www.youtube.com/watch?v=c4C0LXmSHhE
https://www.youtube.com/watch?v=SXKzTjxXW88
Les autres vidéos de ces 2 chaines sont intéressantes également.
Bonjour,
Je pensais avoir compris le souci, j'ai donc fait ce code pour tester :
Mais rien ne change, j'ai toujours ce message d'erreur quand je clique sur "send"
Si quelqu'un pouvais m'expliquer...
Merci et bonne soirée.
P.
Je pensais avoir compris le souci, j'ai donc fait ce code pour tester :
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
// -----------------
// EDIT THE 2 LINES BELOW AS REQUIRED
$headers = 'From : ledavdave@monsite.com' . "\r\n" .
$email_to = "ledavdave@monsite.com"; // receiver email
$email_subject = "New Message Received";
// -----------------
// fonctions utiles
if( !function_exists('show_msg_error') )
{
function show_msg_error($error)
{
// your error code can go here
echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
echo "<p>Sorry, but there were error(s) found:</p>";
echo "<p>".$error."</p>";
echo "<p>Please correct them and try again</p>";
echo "</div>";
exit;
Mais rien ne change, j'ai toujours ce message d'erreur quand je clique sur "send"
Si quelqu'un pouvais m'expliquer...
Merci et bonne soirée.
P.
Bonsoir, en PHP le point sert d'opérateur de concaténation. Le point-virgule sert de délimiteur entre chaque instruction.
En fin de ligne de l'affectation de la variable $headers c'est un point-virgule qu'il faut et non un point.
Pour le nom de l'entête c'est "From:" et non pas "From :" . Pour le coup je ne saurais l'expliquer mais je pense que c'est important qu'il n'y ait pas d'espace entre le nom et les deux point. Les deux point font partie intégrante du nom, dirais-je.
Tu essaies de faire compliquer. Fait un simple mail en texte, et uniquement quand cela fonctionnera tu ajoutes de l'HTML. Procède par étapes.
En fin de ligne de l'affectation de la variable $headers c'est un point-virgule qu'il faut et non un point.
Pour le nom de l'entête c'est "From:" et non pas "From :" . Pour le coup je ne saurais l'expliquer mais je pense que c'est important qu'il n'y ait pas d'espace entre le nom et les deux point. Les deux point font partie intégrante du nom, dirais-je.
Tu essaies de faire compliquer. Fait un simple mail en texte, et uniquement quand cela fonctionnera tu ajoutes de l'HTML. Procède par étapes.
Bonjour casper2,
Merci beaucoup pour tes explications.
Cela ne fonctionne pas, toujours le même message d'erreur
Pour ce qui est de l'HTML, il est sur le fichier de base et je n'ose pas y toucher. Je tente juste d'y rajouter un expéditeur comme le demande IONOS depuis janvier 2024
Merci énormément
Bonne journée,
P.
Merci beaucoup pour tes explications.
Cela ne fonctionne pas, toujours le même message d'erreur
Pour ce qui est de l'HTML, il est sur le fichier de base et je n'ose pas y toucher. Je tente juste d'y rajouter un expéditeur comme le demande IONOS depuis janvier 2024
Merci énormément
Bonne journée,
P.
Tu veux parler de ceci? https://www.ionos.fr/assistance/hebergement/aucun-envoi-de-mails-avec-une-adresse-dexpediteur-differente/#c233572
Si oui je me demande si la fonction mail() est toujours bien active sur ton hébergement.
Faisons un teste simple. Dans un nouveau fichier .php tu vas écrire le code de la documentation https://www.php.net/manual/fr/function.mail.php#example-3141 exemple 2 ou 3 au choix.
tu testes le retour de la fonction comme ceci:
tu appelles le script directement en écrivant le chemin dans la barre d'adresse du navigateur et tu nous dit ce qui est affiché.
Tu dois bien vérifier que l'adresse indiquée dans le From " appartient au domaine de votre contrat d'hébergement" comme le demande ton hébergeur, c'est à dire que si ton site est site.fr l'adresse doit être quelquechose@site.fr et pas un autre domaine.
Modifié par casper2 (04 Nov 2024 - 10:51)
Si oui je me demande si la fonction mail() est toujours bien active sur ton hébergement.
Faisons un teste simple. Dans un nouveau fichier .php tu vas écrire le code de la documentation https://www.php.net/manual/fr/function.mail.php#example-3141 exemple 2 ou 3 au choix.
tu testes le retour de la fonction comme ceci:
$retourMail = mail($to, $subject, $message, $headers);
if ($retourMail) {
echo 'mail envoyé';
} else {
echo 'mail pas envoyé';
}
tu appelles le script directement en écrivant le chemin dans la barre d'adresse du navigateur et tu nous dit ce qui est affiché.
Tu dois bien vérifier que l'adresse indiquée dans le From " appartient au domaine de votre contrat d'hébergement" comme le demande ton hébergeur, c'est à dire que si ton site est site.fr l'adresse doit être quelquechose@site.fr et pas un autre domaine.
Modifié par casper2 (04 Nov 2024 - 10:51)
1) copier/coller dans un nouveau fichier .php le code donner en lien plus haut (Exemple #2 Envoi d'un mail avec des en-têtes supplémentaires) de la documentation php.net/mail
2) Adapter les valeurs avec tes propres données
3) Adapter le code en recopiant l'exemple que je donne plus haut (à ajouter au code précédemment écrit). Cela affichera un texte en fonction de la valeur de retour de la fonction mail. Cette fonction retourne true ou false.
4) upload sur ton espace d'hébergement le fichier écrit (oui cela peut être test.php)
5) si tu as placé le fichier à la racine oui c'est monsite.com/test.php qu'il faut écrire comme URL dans la barre d'adresse de ton navigateur.
2) Adapter les valeurs avec tes propres données
3) Adapter le code en recopiant l'exemple que je donne plus haut (à ajouter au code précédemment écrit). Cela affichera un texte en fonction de la valeur de retour de la fonction mail. Cette fonction retourne true ou false.
4) upload sur ton espace d'hébergement le fichier écrit (oui cela peut être test.php)
5) si tu as placé le fichier à la racine oui c'est monsite.com/test.php qu'il faut écrire comme URL dans la barre d'adresse de ton navigateur.
Avec ce code, je tombe sur une page vierge en mettant le chemin sur Chrome
J'ai encore raté quelque chose ? Je n'y comprends rien
Bonne soirée,
P.
J'ai encore raté quelque chose ? Je n'y comprends rien
<?php
$to = 'ledavdave@monsite.com';
$subject = 'le sujet';
$message = 'Bonjour !';
$headers = 'From: ledavdave@monsite.com' . "\r\n" .
'Reply-To: ledavdave@monsite.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
$retourMail = mail($to, $subject, $message, $headers);
if ($retourMail) {
echo 'mail envoyé';
} else {
echo 'mail pas envoyé';
}
?>
Bonne soirée,
P.
Pas nécessaire de faire un double appel à la fonction mail.
Garde uniquement le deuxième appel. Le script doit planté au premier appel de mail() ce qui n'est pas normal.
Tu peux ajouter en tout début le code donner par JENCAL sur ce sujet:
Ce qui devrait t'afficher un message d'erreur.
Autre solution, ouvrir l'inspecteur des éléments (F12) onglet réseau et voir quelle est le code de retour du serveur. Si c'est une erreur 500 il faut aller voir les log du serveur dans panel d'administration de ton hébergeur.
Garde uniquement le deuxième appel. Le script doit planté au premier appel de mail() ce qui n'est pas normal.
Tu peux ajouter en tout début le code donner par JENCAL sur ce sujet:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Ce qui devrait t'afficher un message d'erreur.
Autre solution, ouvrir l'inspecteur des éléments (F12) onglet réseau et voir quelle est le code de retour du serveur. Si c'est une erreur 500 il faut aller voir les log du serveur dans panel d'administration de ton hébergeur.
Bonjour casper2,
Merci pour tout mais je n'arrive pas à "conjuguer" les deux fichiers.
Mon code est actuellement :
et j'ai un message d'erreur lors du "send". J'ai bien évidemment essayé plusieurs fois de combiner les deux, mais sans succès
Merci encore et bonne journée,
P.
Merci pour tout mais je n'arrive pas à "conjuguer" les deux fichiers.
Mon code est actuellement :
if( isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['comments']) )
{
// -----------------
// EDIT THE 2 LINES BELOW AS REQUIRED
$to = 'ledavdave@monsite.com';
$subject = 'le sujet';
$message = 'Bonjour !';
$headers = 'From: ledavdave@monsite.com' . "\r\n" .
'Reply-To: ledavdave@monsite.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// -----------------
// fonctions utiles
if( !function_exists('show_msg_error') )
{
function show_msg_error($error)
{
// your error code can go here
echo "<div style=\"margin:20px 0;padding:20px;background:#fff;color:red;border:1px solid red;border-radius:3px;\">";
echo "<p>Sorry, but there were error(s) found:</p>";
echo "<p>".$error."</p>";
echo "<p>Please correct them and try again</p>";
echo "</div>";
exit;
}
}
// ---------
if( !function_exists('clean_string') )
{
function clean_string($string)
{
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
}
et j'ai un message d'erreur lors du "send". J'ai bien évidemment essayé plusieurs fois de combiner les deux, mais sans succès
Merci encore et bonne journée,
P.