J'ai un peu avancé et le résultat est (presque) parfait !
<?php
use PHPMailer\PHPMailer\PHPMailer;
if (isset($_POST['sendmail'])) {
if (isset($_FILES["userfile"]) && $_FILES['userfile']['name'] != "") {
$nom_fichier = $_FILES['userfile']['name'];
$source = $_FILES['userfile']['tmp_name'];
$type_fichier = $_FILES['userfile']['type'];
$taille_fichier = $_FILES['userfile']['size'];
if ($nom_fichier != ".htaccess") { //Vérifie que ce n'est pas un .htaccess
if ($type_fichier == "image/jpeg"
|| $type_fichier == "image/pjpeg"
|| $type_fichier == "application/pdf") { //Soit un jpeg soit un pdf
if (array_key_exists('userfile', $_FILES)) {
$uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
// Upload handled successfully
// Now create a message
$msg = '';
require '../phpmailer/src/PHPMailer.php';
$mail = new PHPMailer;
$mail->setFrom($_POST['email'], $_POST['name']);
$mail->addAddress('[email protected]');
$mail->Subject = $_POST['offre'];
$mail->Body = $_POST['message'];
// Attach the uploaded file
$mail->addAttachment($uploadfile,$nom_fichier);
if (!$mail->send()) {
$msg .= "Mailer Error: " . $mail->ErrorInfo;
} else {
$msg .= "Message sent!";
}
} else {
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
}
}
}
}
?>
<form enctype="multipart/form-data" action="testmail.php" method="post">
<table>
<tr>
<td><label for="nom">Votre nom<div style="color:red;display:inline;">*</div> :</label></td>
<td><input type="text" name="name" required/></td>
</tr>
<tr>
<td><label for="email">Votre E-mail<div style="color:red;display:inline;">*</div> :</label></td>
<td><input type="email" name="email" required/></td>
</tr>
<tr>
<td>Votre offre<div style="color:red;display:inline;">*</div> :</td>
<td><input type="text" name="offre" required/></td>
</tr>
<tr>
<td><label for="message">Vos motivations<div style="color:red;display:inline;">*</div> :</label></td>
<td><textarea name="message" rows="2" cols="50" required></textarea></td>
</tr>
<tr>
<td><label for='userfile'>Ajouter une pièce jointe<span></span></label></td>
<td><input type="file" name="userfile" id="userfile"></td>
</tr>
<tr>
<td></td>
<td><input name="sendmail" type="submit" value="Envoyer"></td>
</tr>
</table>
</form>
Alors, j'ai un peu regardé à droite à et à gauche comment les gens ont fait et j'ai pu ajouter les conditions pour le mail qui fonctionnent. Je n'arrive pas à envoyer autre chose que des pdf, et jpeg. Donc ce soucis est résolu.
Désormais, en ajoutant la variable $nom_fichier qui correspond à $_FILES['userfile']['name'] le nom du fichier s'affiche avec l'extension dans le mail, pas de risque d'ouvrir un .exe ou pire, donc.
Mon dernier soucis semble presque bête, pour le coup... Je n'arrive pas à faire apparaître "Message sent" ou "Mailer error". L'utilisateur ne saura donc pas ce qui arrive à ses informations !
J'ai un peu avancé et le résultat est (presque) parfait !
[PHP]<?php
use PHPMailer\PHPMailer\PHPMailer;
if (isset($_POST['sendmail'])) {
if (isset($_FILES["userfile"]) && $_FILES['userfile']['name'] != "") {
$nom_fichier = $_FILES['userfile']['name'];
$source = $_FILES['userfile']['tmp_name'];
$type_fichier = $_FILES['userfile']['type'];
$taille_fichier = $_FILES['userfile']['size'];
if ($nom_fichier != ".htaccess") { //Vérifie que ce n'est pas un .htaccess
if ($type_fichier == "image/jpeg"
|| $type_fichier == "image/pjpeg"
|| $type_fichier == "application/pdf") { //Soit un jpeg soit un pdf
if (array_key_exists('userfile', $_FILES)) {
$uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
// Upload handled successfully
// Now create a message
$msg = '';
require '../phpmailer/src/PHPMailer.php';
$mail = new PHPMailer;
$mail->setFrom($_POST['email'], $_POST['name']);
$mail->addAddress('
[email protected]');
$mail->Subject = $_POST['offre'];
$mail->Body = $_POST['message'];
// Attach the uploaded file
$mail->addAttachment($uploadfile,$nom_fichier);
if (!$mail->send()) {
$msg .= "Mailer Error: " . $mail->ErrorInfo;
} else {
$msg .= "Message sent!";
}
} else {
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
}
}
}
}
?>[/PHP]
[html]<form enctype="multipart/form-data" action="testmail.php" method="post">
<table>
<tr>
<td><label for="nom">Votre nom<div style="color:red;display:inline;">*</div> :</label></td>
<td><input type="text" name="name" required/></td>
</tr>
<tr>
<td><label for="email">Votre E-mail<div style="color:red;display:inline;">*</div> :</label></td>
<td><input type="email" name="email" required/></td>
</tr>
<tr>
<td>Votre offre<div style="color:red;display:inline;">*</div> :</td>
<td><input type="text" name="offre" required/></td>
</tr>
<tr>
<td><label for="message">Vos motivations<div style="color:red;display:inline;">*</div> :</label></td>
<td><textarea name="message" rows="2" cols="50" required></textarea></td>
</tr>
<tr>
<td><label for='userfile'>Ajouter une pièce jointe<span></span></label></td>
<td><input type="file" name="userfile" id="userfile"></td>
</tr>
<tr>
<td></td>
<td><input name="sendmail" type="submit" value="Envoyer"></td>
</tr>
</table>
</form>[/html]
Alors, j'ai un peu regardé à droite à et à gauche comment les gens ont fait et j'ai pu ajouter les conditions pour le mail qui fonctionnent. Je n'arrive pas à envoyer autre chose que des pdf, et jpeg. Donc ce soucis est résolu.
Désormais, en ajoutant la variable $nom_fichier qui correspond à $_FILES['userfile']['name'] le nom du fichier s'affiche avec l'extension dans le mail, pas de risque d'ouvrir un .exe ou pire, donc.
Mon dernier soucis semble presque bête, pour le coup... Je n'arrive pas à faire apparaître "Message sent" ou "Mailer error". L'utilisateur ne saura donc pas ce qui arrive à ses informations !