将多个用户选择的附件添加到电子邮件中

时间:2012-10-11 08:51:25

标签: php html

我正在为我的网站上的管理员实施基本的电子邮件功能。他们可以设置主题,内容等,然后将邮件发送给指定的收件人。我遇到的问题是附件。他们应该能够选择已经在网络服务器上的多个文件 (例如,public_html / fileuploads / myfile.pdf)。

如果无法从网络服务器连接,那么我至少需要实现一种可以从PC上附加多个文件的方式。目前我正在使用Swiftmailer,它接受这样的附件:

$message->attach(Swift_Attachment::fromPath('/path/to/file.pdf'));

所以我需要用户能够选择多个文件。我可以通过以下方式完成:

<input type="file" name="attachment[]" multiple/>

但是现在我不知道如何获取每个所选文件的完整路径,然后将每个文件添加为附件。它应该从HTML提交到我的mailer.php页面。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你会得到文件名&amp; php中的tmp文件源如下所示

for($i=0;$i<count($_FILES["attachment"]["name"]);$i++)  
{  
  if($_FILES["attachment"]["name"][$i] != "")  
  {  
    //here you will get all files selected by user.
    echo $_FILES["attachment"]["tmp_name"][$i];
    echo $_FILES["attachment"]["name"][$i] 

    //here you can copy files to your server, then pass one to your swift mailer function.
    //to copy file to your server, you can use copy() or move_upload_file() function.
  }  
}  

答案 1 :(得分:0)

// first get a list of the attachments
$attachments_dir = 'public_html/fileuploads';
$attachments = glob("$attachments_dir/*.pdf");

// then put them into the form
foreach ($attachments as $attachment) {
  echo '<input type="checkbox" name="attachments[]" value="',$attachment], '">',$attachment,'<br />'; 
 }


// then when the form is submitted, use them
$selected_attachments = $_POST['attachments'];
foreach ($selected_attachments as $attachment) {
  $message->attach(Swift_Attachment::fromPath($attachment));
}

请注意,虽然这显示了您要通过的过程并不十分安全。 例如,某人可以更改/root/secretpasswords.txt的附件,您可以附加不期望的内容。

如果所有附件仅在一个目录中,您可以使用文件名部分而不是提交表单中的路径/文件名,但这应该足以让您入门。