1

管理者向けの基本的な電子メール機能をサイトに実装しています。件名、内容などを設定して、指定した受信者にメールを送信できます。私が抱えている問題は添付ファイルにあります。すでに Web サーバー上にある複数のファイルを選択できる必要があります(たとえば、public_html/fileuploads/myfile.pdf)。

Web サーバーから添付できない場合は、少なくとも PC から複数のファイルを添付できる方法を実装する必要があります。現在、私は Swiftmailer を使用しており、次のような添付ファイルを受け入れます。

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

したがって、ユーザーが複数のファイルを選択できるようにする必要があります。これは次の方法で達成できます。

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

しかし、選択した各ファイルの完全なパスを取得して、各ファイルを添付ファイルとして追加する方法がわかりません。HTML から私の mailer.php ページに送信する必要があります。

どんな助けでも大歓迎です。

4

2 に答える 2

0

以下のように、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.
  }  
}  
于 2012-10-11T09:12:04.513 に答える
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 に変更し、予期しないものを添付する可能性があります。

すべての添付ファイルが 1 つのディレクトリのみにある場合は、送信フォームでパス/ファイル名ではなくファイル名の部分を使用することもできますが、開始するにはこれで十分です。

于 2012-10-11T09:17:53.833 に答える