PHP电子邮件附件收到时为0字节文件大小[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个电子邮件附件脚本,它可以工作并向我发送一个具有正确名称的文件...但是该文件是0字节。

这是php:

          $namer = $_FILES["cv_upload"]["name"];
          $file ="/home2/deserul7/public_html/nkaccounting/"."temp_cv/"."".$namer."";
          $contenttype = $_FILES["cv_upload"]['type'];
          $handle = fopen($file, "rb");
          $file_size = filesize($file);
          $content = fread($handle, $file_size);
          fclose($handle);

          $content = chunk_split(base64_encode($content));
          $uid = md5(uniqid(time()));
          $name = basename($file);

          $eol = PHP_EOL;

          // Basic headers
          $header = "From: NK Accounting <[email protected]>".$eol;
          $header .= "MIME-Version: 1.0\r\n";
          $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"";

          // Put everything else in $message
          $message = "--".$uid.$eol;
          $message .= "Content-Type: text/html; charset=ISO-8859-1".$eol;
          $message .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
          $message .= $msg2."<br><br><br>".$eol;
          $message .= "--".$uid.$eol;
          $message .= "Content-Type: ".$contenttype."; name=\"".$name."\"".$eol;
          $message .= "Content-Transfer-Encoding: base64".$eol;
          $message .= "Content-Disposition: attachment; filename=\"".$name."\"".$eol;
          $message .= $content.$eol;
          $message .= "--".$uid."--";

          if (@mail($ouremail, $subject2, $message, $header)){
            echo "sent";
          }

当我把它发送到我的Gmail时,它工作正常,但当我试图通过我的桌面上的邮件应用程序,它来自0字节...请帮助

php email attachment email-attachments
1个回答
1
投票

附件标题和附件内容之间应该有一个空行。你只有一个$eol,所以没有空白行(你用$msg2正确地做了这个部分)。将Content-Disposition行更改为:

      $message .= "Content-Disposition: attachment; filename=\"".$name."\"".$eol.$eol;

如果使用here-string而不是连接,则可以更轻松地查看此类内容。

$message = <<<EOF
--$uid
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

$msg2<br><br><br>
--$uid
Content-Type: $contenttype; name="$name"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$name"

$content
--$uid
EOF;
© www.soinside.com 2019 - 2024. All rights reserved.