PHPMailer多个附件发送电子邮件但不发送文件

PHPMailer多个附件发送电子邮件但不发送文件,php,phpmailer,attachment,email-attachments,Php,Phpmailer,Attachment,Email Attachments,我已经尝试了在这个特定主题上可以找到的所有StackOverflow(有很多),但是大多数人都忘记了表单标签中的enctype。我仍然收到电子邮件,只是没有任何附加文件 提交表单时,我的$\u文件数组似乎没有填充。下面的代码使用提交的字段数据发送html电子邮件,但没有附件 这是表单随输入数据提交但没有附件时日志中的最新错误: [24-Jan-2020 22:06:33 UTC]PHP警告:count():参数必须是在第89行的********/public_html/rtform/contac

我已经尝试了在这个特定主题上可以找到的所有StackOverflow(有很多),但是大多数人都忘记了表单标签中的
enctype
。我仍然收到电子邮件,只是没有任何附加文件

提交表单时,我的
$\u文件
数组似乎没有填充。下面的代码使用提交的字段数据发送html电子邮件,但没有附件

这是表单随输入数据提交但没有附件时日志中的最新错误:

[24-Jan-2020 22:06:33 UTC]PHP警告:count():参数必须是在第89行的********/public_html/rtform/contact.PHP中实现可数的数组或对象

我已经指出了下面代码中的第89行

这是我表格的开头和结尾,底部是我的文件输入(表格的其余部分太长,无法包含整个内容:

<form id="contact-form" method="POST" action="contact.php" role="form" enctype="multipart/form-data">
    <div class="controls">

        <!-- the middle of the form here -->

        <div class="row">
            <h3 class="form_title">Upload Additional Supporting Documents</h3>
            <div class="col-lg-12">
                <label for="attachments[]">Select one or more files:
                    <input name="attachments[]" type="file" multiple="multiple">
                </label>
            </div>
        </div>

        <hr/>

        <div class="form-group">
            <div class="g-recaptcha" data-sitekey="**************************************" data-callback="verifyRecaptchaCallback" data-expired-callback="expiredRecaptchaCallback"></div>
            <input class="form-control d-none" data-recaptcha="true" required data-error="Please complete the Captcha">
            <div class="help-block with-errors"></div>
        </div>

        <p><span class="red">Fields marked with * denotes a required field.</span></p>
        <input type="submit" class="btn btn-success btn-send" value="Submit Order">

        <div class="messages"></div>

    </div><!-- end .controls -->

</form>

这是值得问你的JS

您正在这样做:

data: $(this).serialize(),
这将不包括文件附件。您需要使用并关闭一些jQuery功能

首先,为文件输入提供一个id,以便您可以更轻松地将其作为目标(您的
标签
标记也应该以该id为目标,而不是
名称
属性):


注意:此方法在10版之前的Internet Explorer中不起作用。

“当发出ajax请求时”-什么ajax请求?您发布的代码中没有JS!在您的PHP安装中?您是否将其与PHPMailer提供的进行了比较?@Synchro-我已经包含了我的jQuery,尽管它似乎与手头的问题无关。是的,在此安装中启用了文件上载,最大文件大小为200mb,最大文件上载为20。是的,我直接从PHPMailer示例中获取了这个多文件上传片段。好的。如果您的
$\u文件
super-global是空的,那么它指向系统配置而不是脚本问题。很高兴知道。知道具体是什么吗?不幸的是,所有这些操作只是将
$\u文件
信息输入ajax请求,而不是我的问题所在ng.我需要PHPMailer脚本将文件正确附加到发送的电子邮件中。这就是jQuery不相关的原因。是的,但您无法将文件放入PHPMailer的原因是因为您的
$\u files
数组为空,而它为空是因为您在ajax提交中未使用
FormData
,因此没有上载文件ed…仍然不起作用。发送的电子邮件上没有附加文件。我向jQuery添加了
FormData
,但我现在甚至没有在Inspector的网络选项卡中看到响应对象。jQuery只是在提交后显示一条成功/错误消息。它与
发布表单数据的php有什么关系?我是genu我很好奇。我的印象是jQuery与实际提交数据和发送电子邮件无关。那么当你说
$(“#联系人表单”)时,你认为会发生什么情况呢{
???jQuery正在处理整个表单提交,包括附件-这就是ajax!!我感谢您的帮助。很抱歉造成混淆。通过您的回答,我们已经解决了这个问题。
$(function () {

    window.verifyRecaptchaCallback = function (response) {
        $('input[data-recaptcha]').val(response).trigger('change');
    }

    window.expiredRecaptchaCallback = function () {
        $('input[data-recaptcha]').val("").trigger('change');
    }

    $('#contact-form').validator();

    $('#contact-form').on('submit', function (e) {
        if (!e.isDefaultPrevented()) {
            var url = "contact.php";

            const theForm = document.getElementById('contact-form');
            var fd = new FormData(theForm);
            var files = $("#file_attachments").prop('files');

            for (var i = 0; i < files.length; i++) {
              fd.append("attachments", files[i]);
              console.log("File #"+(i+1)+" attached: "+files[i]);
            }

            $.ajax({
                type: "POST",
                url: url,
                data: fd,
                processData: false,
                contentType: false,
                success: function(data) {
                    var messageAlert = 'alert-' + data.type;
                    var messageText = data.message;
                    var messageFiles = data.files;
                    var messageFilesCount = data.numberOfFiles

                    var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div><div>Number of Files: ' + messageFilesCount + ' - ' + messageFiles + '</div>';
                    if (messageAlert && messageText) {
                        $('#contact-form').find('.messages').html(alertBox);
                        $('#contact-form')[0].reset();
                        grecaptcha.reset();
                    }
                },
                error: function(data) {
                    //this is going to happen when you send something different from a 200 OK HTTP
                    alert('Ooops, something happened: ' + data.message);
                }
            });
            return false;
        }
    })
});
data: $(this).serialize(),
<input name="attachments[]" id="attachments" type="file" multiple="multiple">