2016-12-14 19 views
0

私はPHPの初心者です。私の英語は間違っている可能性があります...私はフォームの添付ファイルを使ってphpmailerでメールを送信する方法を見つけようとしました。 ファイルはサーバ上のディレクトリにアップロードされていますが、2つのファイルがあり、1つは良い、もう1つは0バイト、コードはそのファイルを...間違ったものに添付します!私は間違ったものを見つけることができません... メールが送信されたときにもメッセージショーはありません... 誰かが私を助けることができる場合私は非常に感謝しています!

HTMLPhpmailer Addattachmentが間違っています

<form action="formulaire.php" method="post" enctype="multipart/form-data"> 
    <table align="center"><tr><td><label for="nom">Votre nom :</label></td> 
     <td><input type="text" name="nom" required/><br></td></tr> 
     <tr><td><label for="prenom">Votre prénom: </label></td> 
     <td><input type="text" name="prenom" required/><br></td></tr> 
     <tr><td><label for="societe">Société: </label></td> 
     <td><input type="text" name="societe" required/><br></td></tr> 
     <tr><td><label for="phone">Téléphone: </label></td> 
     <td><input type="text" name="phone" required/><br></td></tr> 
     <tr><td><label for="email">Votre E-mail: </label></td> 
    <td><input type="email" name="email" required/><br></td></tr> 
    <tr><td><label for="message">Texte explicatif :</label></td><br> 
     <td><textarea name="message" rows="2" cols="50" required></textarea></td></tr> 
    <tr><td><input type="hidden" name="MAX_FILE_SIZE" value="10000000"> Send this file: <input name="userfile" type="file"></td></tr> 
     <tr><td></td></tr> 
     <tr><td align="center"><input type="submit" value="Envoyer"></td></tr></table> 
</form> 

PHP:あなたはそれを呼び出すとき

<?php 
      if (array_key_exists('userfile', $_FILES)) { 
      $uploadfile = tempnam('upload', $_POST['nom']); 
      if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile.".jpg")) { 
      require_once("PHPMailer/class.phpmailer.php"); 
      require_once('PHPMailer/PHPMailerAutoload.php'); 
      $mail = new PHPMailer(); 
      $mail->From = $_POST['email']; 
      $mail->IsMail(); 
      $mail->ClearAddresses(); 
      $mail->AddAddress ("[email protected]"); 
      $mail->isHTML(true); // Set email format to HTML 
      $mail->Subject = 'xxxxx'; 
      $mail->Body = '<ul> 
      <li>Nom : '. $_POST['nom'] .'</li> 
      <li>Prenom : '. $_POST['prenom'] .'</li> 
      <li>Societe : '. $_POST['societe'] .'</li> 
      <li>Telephone : '. $_POST['phone'] .'</li> 
      <li>E-mail : '. $_POST['email'] .'</li> 
      '.$filename;' 
     </ul>'; 
      $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 
      $mail->addAttachment($uploadfile, ''); 
      if(!$mail->send()) { 
      $msg = "Mailer Error: " . $mail->ErrorInfo; 
     } else { 
      $msg = "Message sent!"; 
     } 
    } else { 
     $msg = 'Failed to move file to ' . $uploadfile; 
    } 
} 
?> 
+0

あなたは '$ msg'を定義していますが、それを表示しません。 '$ uploadfile'の値と' addAttachment() 'の呼び出しの戻り値を確認してください。 Fromアドレスとして送信者のアドレスを使用しないでください。それは偽造され、メッセージがSPFチェックに失敗する原因となります。 PHPMailerクラス*とオートローダーをロードする必要はありません。オートローダーは必要なものだけです。 – Synchro

+0

こんにちは、助けてくれてありがとう、私はステータスが表示されているメッセージを修正しました! – mat75011

+0

私はphpmailerclassを削除し、オートローダーを保持します。私はFromアドレスの問題を理解していません!私は私の郵便でそれを必要とする...私は何の代わりにそれを置くことができますか?私は$ uploadfileの値をチェックし、それは0bファイルでした。ですから、$ mail-> addAttachment($ uploadfile。 "jpg"、 '');という行を変更します。今すぐファイルがメールに添付されています!そのようなものでなければなりません... – mat75011

答えて

0

tempnam()が実際に空のファイルを作成します。これは後で使用するために一意の一時ファイルを "予約"する方法です。ただし、move_uploaded_file()に電話すると、最後に「.jpg」が追加されます。このため、ファイルのコピーが2つあり、空のファイルが1つあります。

メッセージの末尾に$uploadfile.'.jpg'の代わりに$uploadfileを添付しています。これは、長さ0のファイルが電子メールに添付されたファイルである理由です。 2番目のパラメータでは、ファイルに任意の名前を付けて、ディスク上のファイル名の代わりに使用することができます。これは、ユーザーがランダムな不器用な名前のファイルを取得しないため、あなたのケースではより良いでしょう。代わりに$_FILES['userfile']配列の元の名前を使用できます。

関連する問題