PHPMailer添加附件

PHPMailer添加附件,php,phpmailer,Php,Phpmailer,我使用PHPMailer从表单发送数据,它连接正确,适用于我的所有输入字段。除非我在将文件上传作为附件发送时遇到问题 下面是我的addattachment的php if(is_array($_FILES)) { $mail->AddAttachment($_FILES['image']['tmp_name'],$_FILES['image']['name']); } 下面是输入文件的HTML,以便您可以看到它的基本内容 <input type="file" id="image

我使用PHPMailer从表单发送数据,它连接正确,适用于我的所有输入字段。除非我在将文件上传作为附件发送时遇到问题

下面是我的addattachment的php

if(is_array($_FILES)) {
  $mail->AddAttachment($_FILES['image']['tmp_name'],$_FILES['image']['name']); 
}
下面是输入文件的HTML,以便您可以看到它的基本内容

<input type="file" id="image" name="image" class="" />
哦,也就是说,我用的是

我也试过了

if (array_key_exists('image', $_FILES)) {
      $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['image']['name']));

      if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
        $mail->addAttachment($uploadfile, 'UPLOAD file');
      }
}
但这也不起作用。同样的问题


如果有人在PHPMailer和Ajax提交文件附件时遇到问题,我将通过进一步研究找到解决方案

使用随附的PHP文档,这与最终的ajax修订版配合使用

if (array_key_exists('userfile', $_FILES)) {

    $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
       // Attach the uploaded file
        $mail->addAttachment($uploadfile, $_FILES['userfile']['name']);
    //Send the message, check for errors
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
    }
}
为了提交表单,我需要更改formData并添加数据类型

$(function() {
  var form = $('#paymentForm');

    $(form).submit(function() {
      var formData = new FormData(this);

        $.ajax({
            type: 'POST',
            url: 'mailer.php',
            data: formData,
            dataType : "json",
            contentType: false,
            cache: false,
            processData: false
        })
    });

});

通过进一步的研究,我发现了解决方案,如果有人在PHPMailer和Ajax提交文件附件时遇到问题

使用随附的PHP文档,这与最终的ajax修订版配合使用

if (array_key_exists('userfile', $_FILES)) {

    $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
       // Attach the uploaded file
        $mail->addAttachment($uploadfile, $_FILES['userfile']['name']);
    //Send the message, check for errors
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
    }
}
为了提交表单,我需要更改formData并添加数据类型

$(function() {
  var form = $('#paymentForm');

    $(form).submit(function() {
      var formData = new FormData(this);

        $.ajax({
            type: 'POST',
            url: 'mailer.php',
            data: formData,
            dataType : "json",
            contentType: false,
            cache: false,
            processData: false
        })
    });

});

您尝试使用了吗?是的,它返回完全相同的结果。如果您先检查索引是否存在,则无法获得未定义的索引错误。什么是
var\u转储($\u文件)显示?该错误消息是否链接到特定行,可能是您在此处未显示的代码?var_dump仅显示
array(0){}
,因此解释了
$\u文件['image']
错误。如果您在浏览器中使用开发工具,它是否在文章正文中显示正确的内容?如果是这样,您可能会在PHP配置中禁用文件上载。已读。是否尝试使用?是的,它返回完全相同的结果。如果先检查索引是否存在,则无法获得未定义的索引错误。什么是
var\u转储($\u文件)显示?该错误消息是否链接到特定行,可能是您在此处未显示的代码?var_dump仅显示
array(0){}
,因此解释了
$\u文件['image']
错误。如果您在浏览器中使用开发工具,它是否在文章正文中显示正确的内容?如果是这样,您可能会在PHP配置中禁用文件上载。阅读