在上传之前用phpmailer发送文件?

时间:2014-10-07 12:40:38

标签: php html attachment phpmailer

我在使用phpmailer脚本发送带附件的电子邮件时遇到问题。如果我想在邮件中添加单个文件,我有一个工作代码。但是当谈到多个文件时,它们看起来甚至都没有上传。

我的单个文件的代码:

if (isset($_FILES['file']) &&
$_FILES['file']['error'] == UPLOAD_ERR_OK)
{
$mail->AddAttachment($_FILES['file']['tmp_name'],
                     $_FILES['file']['name']);

            if(!$mail->Send())
          {
           header("Location: " . $returnErrorPage);
          }
          else
          {
             header("Location: " . $returnHomePage);
          }             

}

我尝试了一些代码,这些代码应循环遍历$ _FILES中的所有文件,但没有成功。然后我测试了以下代码:

$count = count($_FILES['file']['tmp_name']);
echo $count;

它返回0.我知道$ _FILES是空的,但我不知道原因。我是否需要缓冲文件或类似的内容?

编辑: 这是我的html代码,它将文件和其他数据发送到脚本:

<form id="form_907007" class="appnitro" method="post" action="server/phpmailer.php"       
 enctype="multipart/form-data">
<p>Choose data (txt, html etc.):<br>
<input name="file" type="file" size="50" maxlength="100000" multiple>
</p>
</form>

1 个答案:

答案 0 :(得分:1)

我的问题的解决方案基于Synchro的想法,首先上传文件然后发送电子邮件。

在我的html代码中,我不得不改变这一行:

<input name="file" type="file" size="50" maxlength="100000" multiple>

<input name="file[]" type="file" size="50" maxlength="100000" multiple>

这一点很重要,以便稍后在php中访问您要上传的每个文件。

第二步是遍历存储在服务器上的所有文件。这就是我这样做的方式:

foreach ($_FILES["file"]["error"] as $key => $error){

if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["file"]["tmp_name"][$key];
    $name = $_FILES["file"]["name"][$key];

move_uploaded_file($tmp_name," server/data/$name"}

在下一步中,我检查文件是否上传成功,如果return = TRUE我将它们作为附件添加到邮件中:

if(move_uploaded_file($tmp_name,"server/data/$name" ))
            {
                $mail->AddAttachment("server/data/$name");
            }

如果一切顺利,我可以删除文件 后我发送邮件:

if($mail->Send()){

    foreach ($_FILES["file"]["error"] as $key => $error)
    {
    $name = $_FILES["file"]["name"][$key];
    unlink("$name");
    }

header("Location: " . $returnPage);
exit;}

感谢您的帮助!