Bonjour à tous,

Je suis en train de modifier un formulaire envoyé par mail sur un site que j'ai mis en place, de sorte à pouvoir permettre aux utilisateurs d'envoyer une pièce jointe.

J'ai donc suivi notamment ce tuto et celui-ci côté serveur et modifié mon code comme suit :

index.html (côté client)
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<div class="ewf-span9">
   <form name="contactForm" id='contact_form' method="post" action='contact_mail.php' enctype="multipart/form-data">
      <div class="ewf-row">
         <div class="ewf-span6">
            <div id='name_error' class='error'>Please enter your name.</div>
            <div>
               <input type='text' name='name' id='name' class="form-control" placeholder="Your Name">
            </div>
         </div>
         <div class="ewf-span6">
            <div id='email_error' class='error'>Please enter a valid E-mail address.</div>
            <div>
               <input type='text' name='email' id='email' class="form-control" placeholder="Your Email">
            </div>
         </div>
      </div>
      <div id='subject_error' class='error'>Please enter the subject.</div>
      <div>
         <input type='text' name='subject' id='subject' class="form-control" placeholder="Subject">
      </div>
      <div id='message_error' class='error'>Please enter your message.</div>
      <div>
         <textarea name='message' id='message' class="form-control" placeholder="Your Message"></textarea>
      </div>
      <div id='mail_success' class='success'>Thank you. Your message has been sent successfully.</div>
      <div id='mail_fail' class='error'>Sorry, an error occured while attempting to send your message.<br>Please double check you entered a valid e-mail address.</div>
      <div id='recaptcha_fail' class='error'>Sorry, the reCaptcha validation seems to have failed.</div>
      <!-- Upload files control -->
      <div>
         <input type='file' name='attachmentFile' id='attachmentFile' class="form-control">
      </div>
      <p id='submit'>
         <!-- Submit button -->
         <input type='submit' id='send_message' value='Send Me a Message' class="button red" form="contact_form">
      </p>
   </form>
</div>
- Supprimé le recaptcha à des fins d'analyse pour l'instant
- Rajouté l'enctype "multiform/form-data" sur un conseil vu sur Stack Overflow (pour obtenir le même résultat)

- J'ai essayé une seconde version en mettant action='' et en mettant ceci plus bas dans le code :
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script>
   $(document).ready(function (e){
   $("#contact_form").on('submit',(function(e){
   	e.preventDefault();
   	$('#loader-icon').show();
   	var valid;	
   	valid = validateContact();
   	if(valid) {
   		$.ajax({
   		url: "contact_mail.php",
   		type: "POST",
   		data:  new FormData(this),
   		contentType: false,
   		cache: false,
   		processData:false,
   		success: function(data){
   		$("#mail-status").html(data);
   		$('#loader-icon').hide();
   		},
   		error: function(){alert("A quite unexpected error occured.");} 	        
 
   		});
   	}
   }))});
</script>
(Au passage, j'ai dû corriger une fin de fichier (ligne 24) par rapport au tuto du site, pour corriger une erreur de jeton inattendu).
Cette seconde version a donné exactement le même résultat, décrit ci-dessous.

contact_mail.php (côté serveur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = TRUE;
$mail->SMTPSecure = "tls";
$mail->Port     = 587; //Essayé aussi 465, aucune différence 
$mail->Username = "xxx@gmail.com";
$mail->Password = "xxx";
$mail->Host     = "smtp.gmail.com";
$mail->Mailer   = "smtp";
$mail->SetFrom($_POST["email"], $_POST["name"]);
$mail->AddReplyTo($_POST["email"], $_POST["name"]);
$mail->AddAddress("adresse@destinataire.xxx");    
$mail->Subject = ("[MyResume] ".$_POST["subject"]);
$mail->WordWrap   = 80;
$mail->MsgHTML($_POST["message"]);
 
 if(is_array($_FILES)) {
     $mail->AddAttachment($_FILES['attachmentFile']['tmp_name'],$_FILES['attachmentFile']['name']); 
 }
 
$mail->IsHTML(true);
if(!$mail->Send()) {
    echo "sent";
} else {
    echo "failed";
}
Dans le code ci-dessus, la ligne 19 est incriminée. Dans le log PHP, ça donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[01-Jun-2019 05:56:31 UTC] PHP Notice:  Undefined index: attachmentFile in C:\wamp\www\contact_mail.php on line 5464
[01-Jun-2019 05:56:31 UTC] PHP Stack trace:
[01-Jun-2019 05:56:31 UTC] PHP   1. {main}() C:\wamp\www\contact_mail.php:0
Je précise que j'ai dû inclure les classes SMTP et PHPMailer directement dans le fichier contact_mail.php, au moins temporairement, pour contourner des problèmes d'import.

L'erreur PHP que j'obtiens ci-dessus est en local sur WAMP. Ma version PHP est 7.2.14 et ma version jQuery 2.1.1 (un peu obsolète car je travaille sur une maquette un peu ancienne que la nouvelle version fout complètement en l'air).

J'ai aussi essayé le formulaire directement sur mon hébergement mutualisé chez 1and1, et le résultat est que lorsque je soumets le formulaire, le bouton reste coincé à "Sending...", rien ne se passe, et le log PHP que j'ai mis en place sur 1and1 grâce à ce tuto et celui-ci reste vierge.

J'ai épluché plein de tutos qui parlent de cette erreur sur le web, mais aucune solution ne m'a convenu.
Pouvez-vous m'aider SVP ?

Merci d'avance.