为了账号安全,请及时绑定邮箱和手机立即绑定

PHPMailer 多个附件发送电子邮件,但没有文件

PHPMailer 多个附件发送电子邮件,但没有文件

PHP
慕勒3428872 2022-08-19 10:12:55
我似乎已经尝试了在这个特定主题上找到的每一个StackOverflow(而且有很多),但大多数人都忘记了在表单标签或其他东西上。我仍然收到电子邮件,只是没有附加任何文件。enctype当我提交表单时,我的数组似乎没有被填满。下面的代码发送html电子邮件,其中包含提交的字段数据,但没有附件。$_FILES这是表单提交输入数据但没有附件时日志中的最新错误:[24-Jan-2020 22:06:33 UTC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in *******/public_html/rtform/contact.php on line 89我已经在下面的代码中指出了第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>
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

值得问你的JS...


您正在执行以下操作:


data: $(this).serialize(),

这将不包括文件附件。您需要使用 JS FormData 类并关闭一些 jQuery 功能。


首先,为文件输入一个id,以便您可以更轻松地定位它(您的标签也应该定位此id,而不是属性):labelname


<input name="attachments[]" id="attachments" type="file" multiple="multiple">

然后更改 ajax 代码以将表单数据放入对象中,然后将文件元素添加到其中:FormData


var fd = new FormData('contact-form');

var files = $("#attachments").get(0).files;


for (var i = 0; i < files.length; i++) {

  fd.append("attachments", 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 alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</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);

  }

});

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


查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信