电子邮件附件不允许使用某些类型

时间:2013-12-21 11:36:17

标签: php email attachment email-attachments reserved-words

我正在尝试将此代码编写为可以作为应用程序表单播放的位置,并提交用户通过PHP邮件输入的信息。但我继续得到这个错误,它声明不允许文件类型。

某些保留字未突出显示,因此我不确定该程序是否无法识别其功能。我检查了basename函数,其中basename没有按原样突出显示。所以我尝试使用pathinfo,但我不希望整个路径只是它的基本名称。是因为它没有正确编码所以它无法识别文件类型??请检查我的检查代码.....

<?php

if(!empty($_FILES['resume_name']['name'])){

    $file_name=$_FILES['resume_name']['name'];
    $temp_name=$_FILES['resume_name']['tmp_name'];
    $file_type=$_FILES['resume_name']['type'];
    $file_size=$_FILES['resume_name']['size'];

    $base=basename($file_name);
    $extension= pathinfo($base, PATHINFO_EXTENSION);

    $allowed_ext=array(".doc",".docx",".pdf",".zip",".jpeg",".jpg",".txt");

    if (array_intersect($extension,$allowed_ext)){
    $from=$_POST['email'];
    $to="travis.dacosta1@gmail.com";
    $subject= $_POST['departments'];
    $message=' 


            <table cellspacing="0" cellpadding="8" border="0" width="400"> 
            <tr> 
                <td colspan="2"></td> 
            </tr> 
            <tr bgcolor="#eeeeee"> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Name</strong></td> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$first_name.'</td> 
            </tr>  
            <tr bgcolor="#eeeeee"> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Name</strong></td> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$last_name.'</td> 
            </tr>  
            <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
            <tr bgcolor="#eeeeee"> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Email</strong></td> 
                <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$email.'</td> 
            </tr> 

            <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
                <tr bgcolor="#eeeeee"> 
                <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Departments</strong></td> 
            </tr>                
            <tr bgcolor="#eeeeee"> 
                <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$departments.'</td> 
            </tr>           

            <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 

            <tr bgcolor="#eeeeee"> 
                <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Qualifications</strong></td> 
            </tr>                
            <tr bgcolor="#eeeeee"> 
                <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$qualifications.'</td> 
            </tr>                

            <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
         </table> 

';

    $file=$temp_name;
    $content = chunk_split(base64_encode(file_get_contents($file)));
    $uid=md5(uniqid(time()));

    $header = "From:    ". $from. "\r\n";
    $header .= "Reply-To:   ". $replyto. "\r\n";
    $header .= "MIME-Version: 1.0\r\n";

    $header .="Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";


    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";

    $header .= "--".$uid."\r\n";
    $header .= "Content-type:   ".$file_type."; name=\"".$file_name."\"\r\n";
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: resume_name; filename=\"".$file_name."\"";
    $header .= $content."\r\n\r\n";

    if(@mail($to, $subject, $message, $header)){
            echo "Success";
            }
    else{
        echo "Fail";
        }
    }
else {
    echo "File Type Not Allowed!!";
     }
}
else{    
    echo "No File Posted!!";
    }
}
exit();
?>

4 个答案:

答案 0 :(得分:1)

array_intersect将数组作为第一个参数。 pathinfo($base, PATHINFO_EXTENSION);给出一个String,而不是一个数组。

您可以尝试in_array

if (in_array($extension, $allowed_ext)) {
    ....
}

此外,您的$allowed_ext应该没有点:

$allowed_ext = array("doc", "docx", "pdf", "zip", "jpeg", "jpg", "txt");

因为pathinfo($base, PATHINFO_EXTENSION);给出了没有点的扩展名。

http://www.php.net/manual/en/function.pathinfo.php

答案 1 :(得分:0)

电子邮件附件不允许使用某些类型,因为您已在代码中指定了一些文件扩展名。因此,除了这些文件扩展名之外,您可能不允许这样做。

同时从文件扩展名中删除点您可以在此处添加更多文件扩展名。

$allowed_ext=array("doc","docx","pdf","zip","jpeg","jpg","txt");

答案 2 :(得分:0)

    $allowed_ext=array("doc","docx","pdf","zip","jpeg","jpg","txt");


remove dot in the extence

答案 3 :(得分:0)

我实际上发现了什么是错的。你们都会笑,但我正在研究同一份文件但是来自不同的目录。所以我所做的修改没有上传到服务器。在完成所有建议后,它可以完美地上传文件。