PHPmailer多个附件只发送第一个

时间:2015-07-21 09:58:23

标签: php upload phpmailer

尝试使用phpmailer发送多个文件时,我使用此语句检查是否至少上传了一个文件:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile) or move_uploaded_file($_FILES['userfile2']['tmp_name'], $uploadfile2) or move_uploaded_file($_FILES['userfile3']['tmp_name'], $uploadfile3)) {

并使用此代码附加文件

        $mail->AddEmbeddedImage($uploadfile, 'file', 'Uploaded file');
        $mail->AddEmbeddedImage($uploadfile2, 'file2', 'Uploaded file 2');
        $mail->AddEmbeddedImage($uploadfile3, 'file3', 'Uploaded file 3');

然而,它只发送第一个选定的文件,而不发送其后可能出现的其他文件。只要发现条件为真,if语句就会停止。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

实际上...... if语句在第一个条件匹配时停止...所以构建一个新的逻辑

e.g。

<?php 
   $success = array();
   if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) $success[] = $uploadfile;
   if(move_uploaded_file($_FILES['userfile2']['tmp_name'], $uploadfile2)) $success[] = uploadfile2; 
   if(move_uploaded_file($_FILES['userfile3']['tmp_name'], $uploadfile3)) $success[] = uploadfile3; 

   if($success) {
      // Your code here
   }

答案 1 :(得分:0)

请使用addAttachment尝试而不是AddEmbeddedImage。

  $mail->addAttachment($uploadfile,  'Uploaded file');
  $mail->addAttachment($uploadfile2, 'Uploaded file 2');
  $mail->addAttachment($uploadfile3,  'Uploaded file 3');

答案 2 :(得分:0)

这与PHPMailer无关。它只是对PHP中表达式评估的基本理解。

如果你在if条件的第一部分有一个真实的结果,它不需要评估剩下的条件就知道它将整体评估为真,所以其他函数永远不会被调用

单独检查每个文件,它会起作用。