2016-02-08 6 views
2

Я новичок здесь, но после серфинга по многим страницам я создал форму, которая фактически работает и отправляет вложение в мой адрес электронной почты. Однако, когда приложение не прикреплено к моменту заполнения формы, я получаю это вместо страницы благодарности.Формы для отправки вложения по электронной почте

Внимание: file_get_contents(): Имя файла не может быть пустым в /home/advem/public_html/careers.php на линии 21

Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в/главная/advem/public_html/careers.php: 21) в /home/advem/public_html/careers.php на линии 61

Тем не менее, письмо по-прежнему отправляется ко мне, когда вложение не используется. Любая помощь очень ценится.

<?php 

if(!isset($_POST['submit'])) 
{ 
    //This page should not be accessed directly. Need to submit the form. 
    echo "error; you need to submit the form!"; 
} 

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

     //Deal with the email 
     $to = '[email protected]'; 
     $subject = 'New Proof Request'; 
     $visitor_email = $_POST['email']; 

     $message = strip_tags($_POST['message']); 
     $sku = $_POST['sku']; 
     $phone = $_POST['phone']; 
     $name = $_POST['name']; 
     $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name']))); 
     $filename = $_FILES['file']['name']; 

     $boundary =md5(date('r', time())); 

     //Validate first 
if(empty($name)||empty($visitor_email)) 
{ 
    echo "Name and email are mandatory!"; 
    exit; 
} 

     $headers = "From: [email protected]\r\nReply-To: $visitor_email"; 
     $headers .= "\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"_1_$boundary\""; 

     $message="This is a multi-part message in MIME format. 

--_1_$boundary 
Content-Type: multipart/alternative; boundary=\"_2_$boundary\" 

--_2_$boundary 
Content-Type: text/plain; charset=\"iso-8859-1\" 
Content-Transfer-Encoding: 7bit 

$name 
$sku 
$message 
$phone 

--_2_$boundary-- 
--_1_$boundary 
Content-Type: application/octet-stream; name=\"$filename\" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

$attachment 
--_1_$boundary--"; 

     mail($to, $subject, $message, $headers); 
     //done. redirect to thank-you page. 
     header('Location: thank-you-proof-request'); 

     // Function to validate against any email injection attempts 
function IsInjected($str) 
{ 
    $injections = array('(\n+)', 
       '(\r+)', 
       '(\t+)', 
       '(%0A+)', 
       '(%0D+)', 
       '(%08+)', 
       '(%09+)' 
      ); 
    $inject = join('|', $injections); 
    $inject = "/$inject/i"; 
    if(preg_match($inject,$str)) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 

    } 
?> 

Я также пробовал ответить по следующей ссылке, но так и не повезло.

PHP - sending email with attachment does not show message content

+0

Просто добавьте проверку, чтобы увидеть, содержит ли '$ _FILES' что-либо перед использованием функции' file_get_contents'. Что касается уже отправленного заголовка, см. Http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php – Qirel

+0

Qirel ..... можете ли вы рассказать мне, как напишите, что и куда его поместить? Все, что у меня есть до сих пор, - это просто копирование и вставка из разных вопросов в Stackoverflow. Боюсь, я все испортил. – marengokid75

ответ

0

Я думаю, вы должны изменить свой код на линии 21:

$attachment = ''; 
    $filename = ''; 
    if($_FILES["file"]["error"] != 4 && file_exists($_FILES['file']['tmp_name'])){ 
     $attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name']))); 
     $filename = $_FILES['file']['name']; 
    } 

А на линии 51:

if(!empty($filename)){ 
     --_1_$boundary 
     Content-Type: application/octet-stream; name=\"$filename\" 
     Content-Transfer-Encoding: base64 
     Content-Disposition: attachment 

     $attachment 
     --_1_$boundary--"; 
    } 

Я предлагаю вам использовать библиотеку для отправки электронной почты например, PHPMailer, у него есть много вещей, которые можно использовать и их легко использовать.

Смежные вопросы