2017-11-25 4 views
0

이 코드를 사용할 때 첨부 파일이있는 메일을받을 수 없지만 URL 성공 상태가 표시됩니다. unlink()를 제거하면 서버 업로드 폴더에 첨부 파일이 업로드됩니다. 내 PHPMailer 코드에 문제가 있다고 생각합니다. 누구든지 그것을 식별 할 수 있습니까?PHPMailer v6와 함께 메일을받을 수 없습니다.

내 디렉토리에 PHPMailer, uploads, index.php, upload.php가 있습니다. 많은 일들이 잘못 여기가

<?php 

//Main Includes 
use PHPMailer\PHPMailer\PHPMailer; 
include_once "PHPMailer/PHPMailer.php"; 
include_once "PHPMailer/Exception.php"; 

if (isset($_POST['submit'])) { 

$name = $_POST['name']; 
$email = $_POST['email']; 

$file = $_FILES['file']; 

$fileName = $file['name']; 
$fileTmpName = $file['tmp_name']; 
$fileSize = $file['size']; 
$fileError = $file['error']; 
$fileType = $file['type']; 

$fileExt = explode('.', $fileName); 
$fileActualExt = strtolower(end($fileExt)); 

$allowed = array('jpg', 'jpeg', 'png', 'pdf'); 

if (empty($name) || empty($email)) { 
    header("Location: index.php?empty"); 
    exit(); 
} else { 
    //Check if input characters are valid 
    if (!preg_match("/^[a-zA-Z]*$/", $name)) { 
     header("Location: index.php?invalidname"); 
     exit(); 
    } else { 
     //Check if email is valid 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      header("Location: index.php?emailerror"); 
     exit(); 
     } else { 
      if (in_array($fileActualExt, $allowed)) { 
       if ($fileError === 0) { 
        if ($fileSize < 10000000) { 
         $fileNameNew = uniqid('', true).".".$fileActualExt; 
         $fileDestination = 'uploads/'.$fileNameNew; 
         move_uploaded_file($fileTmpName, $fileDestination); 

         $mail = new PHPMailer(); 
         $mail->addAddress('[email protected]'); 
       $mail->setFrom($email); 
        // $mail->Subject = $subject; 
         $mail->isHTML(true); 
         $mail->Body = $name; 
         $mail->addAttachment($fileDestination); 
         $mail->send(); 

         unlink($fileDestination); 
         header("Location: index.php?uploadsuccess"); 
         exit(); 
      } 
       else { 
         echo "Your file is too big!"; 
        } 
       } else { 
        echo "There was an error uploading your file!".$fileError; 
       } 
      } else { 
       echo "You cannot upload files of this type!"; 
      } 
     } 
    } 
} 
} 
+0

초기 문제는 // 여기를 참조하십시오. 사용 PHPMailer \ PHPMailer \ PHPMailer; include_once "PHPMailer/PHPMailer.php"; include_once "PHPMailer/Exception.php"; –

+0

이메일을 바로 보내지 마십시오. $ mail = new PHPMailer(); print_r ($ mail); 당신이 우편물을 가지고 있는지보십시오. –

+0

@FaizKhan이 (가) 가져올 수 없습니다 ... –

답변

0

upload.php로 index.php를

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
</head> 
<body> 

<form action="upload.php" method="POST" enctype="multipart/form-data"> 
Name <input type="text" name="name"></input><br /><br /> 
Email <input type="email" name="email"></input><br /><br /> 
Upload <input type="file" name="file" required><br /><br /> 
<button type="submit" name="submit">SUBMIT</button> 
</form> 

</body> 
</html> 

입니다 - 내가 정확하게 문제를 일으키는 모르겠어요하지만.

파일 업로드 처리시 the PHP docs을 읽으십시오. 한 가지 문제는 계속하기 전에 반환 값 move_uploaded_file을 확인하지 않는다는 것입니다.

PHPMailer는 an example of how to handle form file uploads correctly을 제공합니다.

PHPMailer는 보내기 전에 사용하는 모든 주소의 유효성을 검사하므로 자신의 유효성 검사를 수행하는 대신 PHPMailer가 신뢰할 수 있습니다.

무언가를 디버깅하려고 할 때 리디렉션을 실행하지 마십시오. 문제가 발생하는 것을보기가 어려워집니다.

$_FILES이 존재하는지 여부를 확인하거나 사용하기 전에 아무 것도 확인하지 않았습니다.

$fileExt = explode('.', $fileName); 
$fileActualExt = strtolower(end($fileExt)); 

확장 기능을 사용하는 것은 매우 이상한 방법입니다. PHP에는 파일 경로를 해체하고 확장을 추출하는 내장 함수가 있습니다. 자신의 롤보다 그것은을 사용하는 것이 안전합니다 : 당신은 Exception 클래스에 대한 use 문을 놓치고

$fileActualExt = pathinfo($fileName, PATHINFO_EXTENSION); 

-하지만 당신은 (생성자에 true를 전달하여) 어쨌든 PHPMailer의 예외를 사용할 수 없습니다했습니다. 이것은 예외 값을 사용하지 않는 경우 수행해야하는 send()의 반환 값을 확인하지 않는 이유를 설명합니다.

보낸 사람 전자 메일 주소를 보낸 사람 주소로 사용하고 있습니다. 위조되어 SPF 오류가 발생하여 전송 실패, 반송 또는 스팸 필터링이 발생합니다. PHPMailer 예제에서는이를 올바르게 수행하는 방법을 보여줍니다.