PHPMailer多个附件发送电子邮件但不发送文件
我已经尝试了在这个特定主题上可以找到的所有StackOverflow(有很多),但是大多数人都忘记了表单标签中的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
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">×</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">