【问题标题】:PHP email attachment 0 byte file size when received [duplicate]PHP电子邮件附件收到时为0字节文件大小[重复]
【发布时间】:2019-09-12 00:39:59
【问题描述】:

我有一个可以正常工作的电子邮件附件脚本并向我发送一个具有正确名称的文件...但是该文件是 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 <sal@desertsunstudio.com>".$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 的 mail() 功能比较少,使用 phpmailer 之类的会好很多
  • 你确定$content里面有什么吗? echo strlen($content); 显示什么?
  • @Barmar 它回显 12514;我不确定这意味着什么
  • @tim 这是为了我的投资组合/学习...我为使文件真正从 tmp 文件夹中移动而进行了很多努力,我目前不使用库
  • 好吧,实际上没有人会经常使用邮件,所以你不会学到任何你真正想要使用真实世界情况的东西

标签: php email attachment email-attachments


【解决方案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;

【讨论】:

  • 这是正确答案!非常感谢巴马尔
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
相关资源
最近更新 更多