doupu1957 2017-01-13 18:54
浏览 35

在目录中循环播放PDF并发送电子邮件PHP

Please help. I realize this is elementary stuff but i'm confused as to why my PDFs are empty. I am receiving the emails with the PDF attachments but they are empty PDF files and I cannot figure out why. I have looked at other similar questions on here but have not found them helpful. I do not wish to use a framework or dependency. Thank you for your help. I expected to have this done within 15 minutes but this bug has set me back.

$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" . "
";
        $headers .= "MIME-Version: 1.0" . "
";
        $headers .= "Content-type: multipart/mixed; boundary=\"" . $separator . "\"" . "
";
        $headers .= "Content-Transfer-Encoding: 7bit" . "
";

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

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

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

1条回答 默认 最新

  • douwa1304 2017-01-14 02:50
    关注

    When using the multi-part/mixed content type, each part must have a blank line separating the header from the body.

    Each part starts with an encapsulation boundary, and then contains a body part consisting of header area, a blank line, and a body area.

    W3 Documentation

    In your code, your headers and message are being generated without any blank lines in between.

    To correct this, just use instead of on the following lines:

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

    Then your attachments will come out correctly.

    评论

报告相同问题?

悬赏问题

  • ¥15 为什么apriori的运行时间会比fp growth的运行时间短呢
  • ¥15 帮我解决一下膳食平衡的线性规划模型的数据实例
  • ¥40 万年历缺少农历,需要和阳历同时显示
  • ¥250 雷电模拟器内存穿透、寻基址和特征码的教学
  • ¥200 比特币ord程序wallet_constructor.rs文件支持一次性铸造1000个代币,并将它们分配到40个UTXO上(每个UTXO上分配25个代币),并设置找零地址
  • ¥15 关于Java的学习问题
  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"