【问题标题】:fopen multiple files to send mail with mail() phpfopen 多个文件以使用 mail() php 发送邮件
【发布时间】:2015-08-29 07:50:32
【问题描述】:

我在使用 mail() php 发送包含多个文件的邮件时遇到问题。到目前为止,只发送第一个文件,所以我需要你的帮助。给你我的代码:

HTML:

<form action="colabora.php" method="post" enctype="multipart/form-data">

[...]

<div id="adjuntos">
<input type="file" name="archivos[]" class="form-control"/>
</div>

[...]

PHP:

[...]

if (isset ($_FILES["archivos"])) {
  $tot = count($_FILES["archivos"]["name"]);
  for ($i = 0; $i < $tot; $i++){
    $_name=$_FILES["archivos"]["name"][$i];
    $_type=$_FILES["archivos"]["type"][$i];
    $_size=$_FILES["archivos"]["size"][$i];
    $_temp=$_FILES["archivos"]["tmp_name"][$i]; 

    //FILES EXISTS
    if(strcmp($_name, "")){
      $fp = fopen($_temp, "rb");
      $file = fread($fp, $_size);
      $file = chunk_split(base64_encode($file)); 
    }

    // FILES HEADERS 
    $headers .= "Content-Type:application/octet-stream ";
    $headers .= "name=\"".$_name."\"r\n";
    $headers .= "Content-Transfer-Encoding: base64\r\n";
    $headers .= "Content-Disposition: attachment; ";
    $headers .= "filename=\"".$_name."\"\r\n\n";
    $headers .= "".$file."\r\n";
    $headers .= "--".$num."--";
  }
}

[...]

邮件($para, $asunto, $body, $headers)

【问题讨论】:

  • 我的代码得到了所有的内容,问题是不是所有的文件都通过电子邮件发送,只有第一个。
  • 我已经完成并获取所有文件。我认为问题是 $file 必须是一个数组才能打开和读取所有文件。可以吗?

标签: php email send


【解决方案1】:

我注意到您在每个附件之前都丢失了一个边界。

// FILES HEADERS 
$headers .= "--".$num."\r\n";  // Boundary
$headers .= "Content-Type:application/octet-stream ";
$headers .= "name=\"".$_name."\"r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; ";
$headers .= "filename=\"".$_name."\"\r\n\n";
$headers .= $file."\r\n";

结束边界(以“--”结尾)应该放在循环之外:

$headers .= "--".$num."--\r\n";

【讨论】:

  • $tot = count(...) 之后的 $tot 值是多少?也可以print_r($_FILES["archivos"]);提交后查看内容。
  • $tot = 5,我没有附加 5 个文件。
  • 我已经替换了我的答案
【解决方案2】:

这里有一些东西导致了它。在文件之后显示 $body 的内容:

$headers .= "Content-Type:application/octet-stream ";
$headers .= "name=\"".$_name."\"r\n";       
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; ";
$headers .= "filename=\"".$_name."\"\r\n\n";
$headers .= "".$file."\r\n";
$headers .= "--".$num."\r\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多