【问题标题】:send email with attachment in php without saving the file to webserver在 php 中发送带有附件的电子邮件而不将文件保存到网络服务器
【发布时间】:2012-08-01 15:55:39
【问题描述】:

我正在创建一个简单的表单,让用户“上传”一个文件和一个 cmets 框。 用户选择文件(可以是图像或pdf)并单击提交后,我不会存储 文件到我的网络服务器,文件将被插入到电子邮件中并发送给我。

我的问题是:如何在不将文件存储在任何地方的情况下附加文件。

我不想使用第三方模块。

更新:

$attachment = $_FILES["OrderList"]["tmp_name"];
$content = file_get_contents($attachment);
$content = chunk_split(base64_encode($content));

我收到一个错误:

第 24 行 C:\dir\orders\upload.php 中的文件名不能为空

第 24 行是$content = file_get_contents($attachment);

【问题讨论】:

  • 上传、附加、发送、删除。
  • 怎么样,暂时保存然后删除
  • PHP 在脚本开始之前将上传的文件存储在 tmp 目录中,因此您将无法避免将文件保存到文件系统。

标签: php email attachment


【解决方案1】:

今天遇到了类似的情况,找到了解决办法,就在这里

if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else {


$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$newname= $_FILES["file"]["tmp_name"].".".$extension;
rename($_FILES["file"]["tmp_name"],$newname);
$attachments = array( $newname );

   wp_mail('emailto send', 'title', 'message','',$attachments );
}

【讨论】:

  • 是的,你是对的..!这是最简单的方法。如果你想保留原来的文件名,那么你可以改变 rename 如下: rename($_FILES["file"]["name"],$newname);
  • @Invincible 不是这样, $_FILES["file"]["name"] 存储没有路径的好名字。而是:$path=implode("/",explode("/",$_FILES["file"]["tmp_name"],-1)); if($path!="") $path.="/"; $newname=$path.$_FILES["file"]["name"]; rename($_FILES["file"]["tmp_name"],$newname);
【解决方案2】:

通过上传文件,它会保存在您的服务器上的临时目录中。例外是 PUT 方法,在这种情况下,文件直接在 php://input 上发送。之后,您可以使用任何您喜欢的 PHP 邮件库。

PHP manual for PUT'ing files

【讨论】:

    【解决方案3】:

    当您接受 PHP 上传的文件时,您已经存储了它。

    保存在tmp文件夹中即可使用。

    当您的脚本结束时,PHP 会自动为您删除它。

    【讨论】:

    • 但是当我使用$attachment = $_FILES["OrderList"]["tmp_name"]; $content = file_get_contents($attachment); $content = chunk_split(base64_encode($content)); 时出现错误:file_get_contents 中的文件名不能为空
    • 您是否回显了 $attachment?它说了什么?您是否从上传时发布的脚本运行代码 sn-p?
    • 我通过在 php.ini 中添加 tmp_dir 解决了这个问题,最新的 php(比 5.3 更新)没有设置默认的 tmp_dir。非常感谢。
    猜你喜欢
    • 2016-02-12
    • 2012-06-15
    • 2010-09-14
    • 1970-01-01
    • 2017-09-06
    • 2011-01-09
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多