PHPmailer 多个附件只先发送

PHPmailer multiple attachments only sends first

当尝试使用 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 语句只要发现条件为真就停止。

有人可以帮助我吗?

事实上...如果语句在第一个条件匹配时停止...所以构建一个新逻辑

例如

<?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
   }

请尝试使用 addAttachment 而不是 AddEmbeddedImage。

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

这与 PHPMailer 无关。;这只是对 PHP.

中表达式求值的基本理解

如果 if 条件的第一部分的结果为真,则无需评估条件的其余部分即可知道它将整体评估为真,因此其他函数永远不会被调用。

分别检查每个文件,它会起作用。