多个文件作为表单中的附件并发送电子邮件

时间:2014-07-02 12:41:21

标签: php forms email attachment

以下是我用来在邮件中发送多个文件作为附件的代码,在本地环境中测试它,附件到达邮箱但是作为空文件,在实时环境中,结果是邮件无法发送虽然文件保存在服务器上的上传文件夹中...一个新手在PHP所以请任何人可以帮助我做错了什么.. ?? 在本地环境中我使用此代码$ server_file =“/ localhost:81 / xyz / uploads / $ path_parts [basename]”;将此文件移动到服务器

下的内容
    <?php

     error_reporting(E_ALL);
     ini_set('display_errors', 1);

    //did files get sent
        if(isset($_FILES) && (bool) $_FILES) {

    //define allowed extensions
        $allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt");
        $files = array();
        $username=$_POST['username'];
        $email=$_POST['email'];

    //loop through all the files
        foreach($_FILES as $name=>$file){
    //define some variables
        $file_name= $file['name'];
        $temp_name= $file['tmp_name'];
    //check if this file type is allowed
        $path_parts = pathinfo($file_name);
        $ext = $path_parts['extension'];
        if(!in_array($ext,$allowedExtensions)) {
            die("extension not allowed");
        }
    //move this file to the server
        $server_file = "/home/public_html/xyz.com/uploads/$path_parts[basename]";
        move_uploaded_file($temp_name,$server_file);
    //add this file to array of files
        array_push($files,$server_file);
        }

    //define some mail variables
        $to = "info@xyz.com";
        $from = "From: $username<$email>\r\nReturn-path: $email";
        $subject = "Photo attachment of . $name .";
        $msg = "Images of $username, $email";
        $headers = "From: $from";
    //define our boundary
        $semi_rand =  md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

    //tell the header about the boundary
        $headers .= "nMIME-Version:1.0\n";
        $headers .= "Content-Type: multipart/mixed;\n";
        $headers .= " boundary=\"{$mime_boundary}\"";
    //part1: define the plain text email
        $message = "\n\n--{$mime_boundary}\n";
        $message .="Content-Type: text/plain; charset=\"iso-8859-1\"\n";
        $message .="Content-Transfer-Encoding: 7bit\n\n". $msg ."\n\n";
        $message .="--{$mime_boundary}\n";
    //part2: loop and define mail attachments
        foreach($files as $file){
        $aFile = fopen($file,"rb");
        $data = fread($aFile,filesize($file));
        fclose($aFile);
        $data = chunk_split(base64_encode($data));
        $message .="Content-Type: {\"application/octet-stream\"};\n";
        $message .= " name=\"$files\"\n";
        $message .= "Content-Disposition: attachment;\n";
        $message .= " filename=\"$files\"\n";
        $message .= "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
        }
    //send the email
        $ok = mail($to, $subject, $message, $headers, $from);
        if($ok){
            header("Location: thank-your.php");
            }
            else{
            echo"<p>mail could not be sent!</p>";
        }
        die();
        }
    ?>

0 个答案:

没有答案