Problème d'envoie d'un mail avec pièce ci-joint.

Fermé
MEZUI - 22 nov. 2022 à 11:19
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 23 nov. 2022 à 12:22

Bonjour, je suis en train de faire un petit projet où je veux avoir un formulaire de contact, qui récupère les infos de l'utilisateur parmi lesquelles, on a l'adresse mail où l'utilisateur peut mettre une pièce ci-joint. J'ai essayé en local et en ligne à plusieurs reprises le fichier ci-après, mais rien.

<?php
session_start();
if (isset($_POST['envoyer'])){
    // Extraction des variables

    extract($_POST);
    // Verifions si les variables existent et si elles sont vides

    if (isset($username) && $username != "" &&
         isset($email) && $email != "" &&
          isset($telephone) && $telephone != ""&&
          isset($message) && $message != ""){
        // Envoyer l'email

        //Le destinataire (votre adresse mail)
$to = "*********@gmail.com";

//L'objet du mail
$subject = "Vous avez reçu un message de : " .$email;

$message = "<p>Vous avez reçu un message de <strong>".$email."</strong></p>
            <p><strong> Nom : </strong>".$username."</p>
            <p><strong> Téléphone : </strong>".$telephone."</p>
            <p><strong> message : </strong> ".$message."</p>
            ";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// More headers
$headers .= 'From: <'.$email.'>' . "\r\n";

//Envoi du mail
$envoyer = mail($to,$subject,$message,$headers);

//Vérification de l'envoi
if ($envoyer) {

    $_SESSION['succes_message'] = "Message envoyé";

}else{

    $info = "Message non envoyé";
}


} else{
        // Si elles sont vides

        $info = "Veuillez remplir tous les champs !";

    }
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="" integrity="" crossorigin="anonymous">
    <title>*********</title>
    <link rel="stylesheet" href="">
</head>

<body>
    <?php
    // afficher le message d'erreur
    if (isset($info)) { ?>

    <p class="request_message" style="color:red">
        <?=$info?>

    </p>

    <?php
   }
    ?>


    <?php
    // afficher le message de succès
    if (isset($_SESSION['succes_message'])) { ?>

    <p class="request_message" style="color:green">;
        <?=$_SESSION['succes_message']?>

    </p>

    <?php
   }
    ?>

    <form action="" method="POST">
        <h2>Contacter nous</h2>
        <label>Nom_utilisateur</label>
        <input type="text" name="username" >
        <label>Email</label>
        <input type="email" name="email" >
        <label>Téléphone</label>
        <input type="number" name="telephone" >
        <label>Message</label>
        <textarea name="message" cols="30" rows="10" ></textarea>
        <button name="envoyer">Envoyer</button>       
    </form>

</body>

</html>


Windows / Firefox 107.0

2 réponses

jee pee Messages postés 39648 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
Modifié le 22 nov. 2022 à 16:06

Bonjour,

Ton source chez moi en local retourne l'erreur

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() 

très classique, la fonction recherche un serveur de messagerie SMTP en local. Il faut renseigner dans le php.ini le smtp et le sendmail_from, on peut aussi le faire directement depuis le source. Mais il faut que ton environnement, et ton fai l'accepte un smtp de base, port 25, sinon il faut gérer des mails authentifiés avec compte/mot de passe.

Je suis chez Free, et sur ma FreeBox j'ai autorisé l'envoi par tout le monde de mail non controlé :-/

Aussi un simple

<?php
ini_set('SMTP','smtp.free.fr');
ini_set('SENDMAIL_FROM','xxxxxxxxxx@free.fr'); 

if(mail('xxxxxxxxx@free.fr', 'sujet', 'message','From: Fred@gmail.com'))
   echo "Mail envoyé avec succès.";
else
   echo "Un problème est survenu.";
exit;
?>

permet d'envoyer un mail. Les 2 lignes ini_set remplaçant l'initialisation dans le php.ini. Sur un hébergement à l'exterieur pareil il faut initialiser le php.ini et il faut un serveur de messagerie utilisable.

J'ai essayé d'intégrer les ini_set dans ton source, sans succès, je n'ai pas vraiment cherché pourquoi, tu devrais rechercher un script de formulaire mail php, il en existe de nombreux opérationnels.


0
jee pee Messages postés 39648 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
22 nov. 2022 à 17:01

je viens de tester, on peut se passer du sendmail_from

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
23 nov. 2022 à 12:22

Peut être remplacer cette ligne:

$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

par celle ci:

$headers .= "Content-type:text/plain;charset=UTF-8" . "\r\n";

Sans grande conviction.

Car le problème produit certainement à cause d'un dysfonctionnement extérieur à votre script.

0