循环浏览目录中的PDF并向PHP发送电子邮件

循环浏览目录中的PDF并向PHP发送电子邮件,php,unix,Php,Unix,请帮忙。我意识到这是基本的东西,但我不明白为什么我的PDF是空的。我收到了带有PDF附件的电子邮件,但它们是空的PDF文件,我不知道为什么。我在这里看过其他类似的问题,但没有发现它们有帮助。我不希望使用框架或依赖项。谢谢你的帮助。我希望在15分钟内完成这项工作,但这个错误让我倒退了 $dir = "scanned_files"; function is_dir_empty($dir) { if(!is_readable($dir)){ return NULL;

请帮忙。我意识到这是基本的东西,但我不明白为什么我的PDF是空的。我收到了带有PDF附件的电子邮件,但它们是空的PDF文件,我不知道为什么。我在这里看过其他类似的问题,但没有发现它们有帮助。我不希望使用框架或依赖项。谢谢你的帮助。我希望在15分钟内完成这项工作,但这个错误让我倒退了

$dir = "scanned_files";

function is_dir_empty($dir) {
    if(!is_readable($dir)){
        return NULL;
    }
    $handle = opendir($dir);
    while(false !== ($entry = readdir($handle))){
        if ($entry != "." && $entry != "..") {
            return FALSE;
        }
    }
    return TRUE;
}

if (is_dir_empty($dir)) {
    echo "the folder is empty"; 
}else{
    $files = array_diff(scandir($dir), array('.', '..', '.DS_Store'));

    foreach($files as $filename){
        $content = file_get_contents($dir . "/" . $filename);
        $content = chunk_split(base64_encode($content));
        $email = "someone@somewhere.com";

        $subject = "Scanned document from the road!";

        $separator = md5(time());

        $headers = "From: someone@somewhere.com" . "\r\n";
        $headers .= "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type: multipart/mixed; boundary=\"" . $separator . "\"" . "\r\n";
        $headers .= "Content-Transfer-Encoding: 7bit" . "\r\n";

        $msg = "--" . $separator . "\r\n";
        $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . "\r\n";
        $msg .= "Content-Transfer-Encoding: 8bit" . "\r\n";
        $msg .= "Your file has arrived." . "\r\n";

        $msg .= "--" . $separator . "\r\n";
        $msg .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . "\r\n";
        $msg .= "Content-Transfer-Encoding: base64" . "\r\n";
        $msg .= "Content-Disposition: attachment" . "\r\n";
        $msg .= $content . "\r\n";
        $msg .= "--" . $separator . "--";

        mail($email, $subject, $msg, $headers);
        echo PHP_EOL . "Mail sent. Filename: " . $filename . PHP_EOL;
    }
}

使用
多部分/混合内容类型时,每个部分必须有一个空行,将标题与正文分开

每个零件都以封装边界开始,然后包含 主体部分由标题区域、空行和主体区域组成

在代码中,生成的标题和消息之间没有任何空行

要更正此问题,只需在以下行中使用
\r\n\r\n
而不是
\r\n

$headers .= "Content-Transfer-Encoding: 7bit" . "\r\n\r\n";
$msg .= "Content-Disposition: attachment" . "\r\n\r\n";

然后,您的附件将正确显示。

“我不希望使用框架或依赖项。”我担心这与为什么这需要您超过15分钟的时间有很大关系,并且这将使您的代码在将来更可能在边缘情况下失败。考虑一下不要浪费更多的时间在这上面,并且投入更多的时间(很容易)用一个第三方的图书馆来完成你所需要的。我确实考虑到了。但我并不是为了那种建议才提出这个问题的。我只想知道为什么我的PDF是空的/我缺少什么。