【问题标题】:phpMailer sending attachment name, not attachmentphpMailer 发送附件名称,而不是附件
【发布时间】:2011-10-05 15:54:38
【问题描述】:

您好,我有一个文件上传字段,名称为“file1”,代码在 phpmailer 脚本中:

if (isset($_FILES['file1']))
{
$file1_path = $_FILES['file1']['tmp_name'];
$file1_name = $_FILES['file1']['name'];
$file1_type = $_FILES['file1']['type'];
$file1_error = $_FILES['file1']['error'];
$mail->AddAttachment($file1_path);
}

由于某种原因,它像 php45we34 一样附加(每次差异,似乎它的临时名称路径,而不是实际文件)

有什么帮助吗?

【问题讨论】:

    标签: php phpmailer email-attachments


    【解决方案1】:

    从你的文件名中去掉空格!

    Blue hills.jpg 应该是Blue_hills.jpg

    $fileName = str_replace(' ', '_', $fileName);

    【讨论】:

    • 欢迎来到 Stack Overflow! =)
    • 这与OP的问题并没有真正的关系,但这是一个很好的建议:+1
    【解决方案2】:

    我建议你在添加附件之前使用函数 move_uploaded_file。

    这是将文件从临时位置移动到服务器某处的示例代码

    $target_path = "uploads/";
    
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
    
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
        " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
    

    之后 AddAttachment 应该可以正常工作。

    $mail->AddAttachment(basename($target_path . $_FILES['uploadedfile']['name']));
    

    【讨论】:

    • 看起来不错。唯一的事情是我想要很多文件上传。 (文件 1、文件 2、文件 3)。有什么方法可以让每一个都命名为相同的东西,并且只在 php 中运行代码块一次?
    • @user845311 您可以为表单中的每个文件使用不同的名称属性,例如file1file2 等和服务器端使用类似 foreach ($_FILES as $key => $file){...} 的循环,在循环内您将使用 $file['tmp_name'] 等。
    • @Ovidiu 好的,我明白了。但是我会为 .basename($_FILES... 使用什么?对于 addattachment?
    • @user845311 基本上你要做的就是将这个答案中的所有代码放入一个循环和循环内,而不是使用$_FILES['uploadedfile']['some_index'],你只会使用$file['some_index']。无需其他更改。
    • @Ovidiu 差不多了。我将文件保存在上传文件夹中,但是当它尝试发送电子邮件时,我收到以下错误:在文件系统上找不到 Blue hills.jpgBlue hills.jpg 文件。为什么会重复名称?这是我的代码..$mail->AddAttachment(basename($target_path . $file['name'])); 感谢您的耐心等待。
    【解决方案3】:

    你看到的就是应该发生的。 You do not specify the attachment name,所以 phpMailer 使用它附加的临时文件的名称。

    如果您希望文件具有不同的名称,则必须指定它。接受的答案有效,因为它反过来 - 它更改文件名,以便文件具有所需的名称。

    通常的处理方式是发布

    $mail->AddAttachment($file1_path, $_FILES['file1']['name']);
    

    覆盖附件名称。

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多