将多个文件附加到电子邮件

时间:2015-04-30 18:39:36

标签: php phpmailer

整天都陷入困境,我不确定问题是什么。我已经阅读了我能在论坛上找到的所有内容,这些内容让我更接近,但还没有完全找到。

这里发生了什么。我们的网站使用phpMailer。我们正试图允许申请人通过我们的联系表格上传2个文件。以下是代码示例。

<td><span class="csr-contact-field">Resume*</span></td>
<td>
    <input type="file" name="resume[]" id="resume" value="<?php if(isset($Resume)) echo $Resume ?>" multiple />
    <br />
    <span class="csr-form-error">
        <?php if (isset($errors['fileError'])) echo $errors['fileError']; ?>
    </span>
</td>

<?php
if ($Page == "careers.php") {
    $target_dir = "upload\\";
    $allowedExtensions = array("pdf", "doc", "docx", "txt", "rtf");
    $names = $_FILES["resume"]["name"];
    $i = 0;
    foreach($names as $name) {
        echo "$name\n";
        $extension = pathinfo($name, PATHINFO_EXTENSION);
        $target_file = $target_dir . basename($name);
        echo "What's here ---- $target_file\n";
        if (in_array($extension, $allowedExtensions)) {
            if ($_FILES["resume"]["error"][$i] > 0) {
                $errors['fileError'] = "Return Code: " . $_FILES["fileError"]["error"] . "<br>";
            }
            else {
                if (file_exists($target_file)) { 
                    move_uploaded_file($_FILES["resume"]["tmp_name"][$i], $target_file);
                }
                else {
                    $errors['fileError']= "File Does Not Exist!";
                }
                $mail->AddAttachment($target_file);
                $i++;
            }   
        }
        else {
            $errors['fileError'] = "Please submit a valid file type (doc, docx, pdf, txt, rtf).";
        }   
    }
}
?>

当我去附加文件时,我收到一个错误,告诉我该文件不存在,但即使我使用完整路径并通过打印出变量确认文件位置,它仍然会给我错误。

任何帮助都将一如既往地受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

看起来我使用以下代码更改了解了所有帮助

<?php
if ($Page == "careers.php") {
    $target_dir = 'upload\\';
    $allowedExtensions = array("pdf", "doc", "docx", "txt", "rtf");
    $names = $_FILES["resume"]["name"];
    $i = 0;
    foreach($names as $name) {
        $extension = pathinfo($name, PATHINFO_EXTENSION);
        $target_file = $target_dir . basename($name);
        if (in_array($extension, $allowedExtensions)) {
            if ($_FILES["resume"]["error"][$i] > 0) {
                $errors['fileError'] = "Return Code: " . $_FILES["fileError"]["error"] . "<br>";
            }
            else {
                move_uploaded_file($_FILES["resume"]["tmp_name"][$i], $target_file);
                if (file_exists($target_file)) { 
                    $mail->AddAttachment($target_file);
                }
                else {
                    $errors['fileError']= "File Does Not Exist!";
                }

            }   
        }

        else {
            $errors['fileError'] = "Please submit a valid file type (doc, docx, pdf, txt, rtf).";
        }
        $i++;
    }
}
?>

唯一的问题是文件一旦发送就会保留在我的上传目录中。有关处理的任何建议吗?

答案 1 :(得分:0)

你的逻辑不对。您正在检查目标文件是否存在,但它尚不存在,因为您将在下一行创建它。

最有可能的是:

if (file_exists($_FILES["resume"]["tmp_name"][$i]))

但即便这样也不是必需的,因为如果这个tmp_name字段被填充,那意味着PHP肯定有那里的文件。