Problème d'envoie d'un mail avec pièce ci-joint.
Max747 Messages postés 258 Date d'inscription Statut Membre Dernière intervention -
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
- Problème d'envoie d'un mail avec pièce ci-joint.
- Pièce d'identité - Accueil - Services publics
- Publipostage mail - Accueil - Word
- Gmail envoyer un mail - Guide
- Windows live mail - Télécharger - Mail
- Comment télécharger un mail - Guide
2 réponses
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.
je viens de tester, on peut se passer du sendmail_from