我正在制作一个表格来发送带有两个附件的电子邮件。仅当我不使用ajax请求时发送电子邮件才有效。那些。当脚本未连接main.js并提交表单 ( submit) 时,则成功发送带有附件的信件。但是当我提交与连接相同的表单时main.js,ajax请求成功但附件未发送
main.js
document.addEventListener("DOMContentLoaded", function() {
alert("ready");
$('#visa-form').submit(function(e) {
var $form = $(this);
$.ajax({
type: $form.attr('method'),
url: "mail.php",
data: $form.serialize()
}).done(function() {
alert("Заявка на визу отправлена успешно");
}).fail(function() {
alert("Произошла ошибка при отправке заявки");
});
e.preventDefault();
});
});
邮件.php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
$message = '';
function clean_text($string)
{
$string = trim($string);
$string = stripslashes($string);
$string = htmlspecialchars($string);
return $string;
}
$mail = new PHPMailer;
$mail->CharSet = "utf-8";
try
{
if(isset($_POST["user_fullname"]))
{
$user_photo = 'uploads/' . $_FILES["photo_scan"]["name"];
$user_passport_scan = 'uploads/' . $_FILES["passport_scan"]["name"];
move_uploaded_file($_FILES["photo_scan"]["tmp_name"], $user_photo);
move_uploaded_file($_FILES["passport_scan"]["tmp_name"], $user_passport_scan);
$message = '
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<h3 align="center">Заявка с сайта tulpantravel.ru</h3>
<table border="1" width="100%" cellpadding="5" cellspacing="5">
<tr>
<td width="30%">ФИО</td>
<td width="70%">' . $_POST["user_fullname"] . '</td>
</tr>
<tr>
<td width="30%">Пол</td>
<td width="70%">' . $_POST['user_gender'] . '</td>
</tr>
<tr>
<td width="30%">Номер телефона</td>
<td width="70%">' . $_POST["user_phone"] . '</td>
</tr>
<tr>
<td width="30%">Электронная почта</td>
<td width="70%">' . $_POST["user_email"] . '</td>
</tr>
<tr>
<td width="30%">Место работы</td>
<td width="70%">' . $_POST["user_workplace"] . '</td>
</tr>
</table>
';
$mail->IsSMTP();
$mail->Host = 'smtp.mail.ru';
$mail->Port = '465';
$mail->SMTPAuth = true;
$mail->Username = '*********';
$mail->Password = '*********';
$mail->SMTPSecure = 'ssl';
$mail->From = '*********';
$mail->FromName = '*********';
$mail->AddAddress('***********', '********');
$mail->IsHTML(true);
$mail->AddAttachment($user_photo);
$mail->AddAttachment($user_passport_scan);
$mail->Subject = 'Заявка с сайта **********';
$mail->Body = $message;
if($mail->Send())
{
// ready
}
else
{
// failure
}
}
}
catch (Exception $error)
{
echo 'Произошла ошибка при отправке запроса: ' . $mail->ErrorInfo;
}
finally
{
// finally
}
索引.php
<div id="su-re-modal" class="form">
<div class="modal-title" style="margin-bottom: 20px;">
<div class="modal-title">Заявка на визу</div>
<div class="modal-close su-re-modal_close"></div>
</div>
<form id="visa-form" method="post" action="mail.php" enctype="multipart/form-data">
<div class="form-group">
<label>ФИО</label>
<input type="text" name="user_fullname" class="form-control" required/>
</div>
<div class="form-group">
<label>Пол</label>
<select name="user_gender" class="form-control">
<option value="Мужской">Мужской</option>
<option value="Женский">Женский</option>
</select>
</div>
<div class="form-group">
<label>Номер телефона</label>
<input type="text" name="user_phone" class="form-control" pattern="\d*" required/>
</div>
<div class="form-group">
<label>Эл. почта</label>
<input type="email" name="user_email" class="form-control" required/>
</div>
<div class="form-group">
<label>Место работы</label>
<input type="text" name="user_workplace" class="form-control" required/>
</div>
<div class="form-group">
<label>Загрузить фото</label>
<input type="file" name="photo_scan" required/>
</div>
<div class="form-group">
<label>Загрузить скан паспорта</label>
<input type="file" name="passport_scan" required/>
</div>
<div class="form-group" align="center">
<input type="submit" name="submit" value="Отправить заявку" class="btn btn-info" />
</div>
</form>
</div>
<script src="jquery-3.5.1.min.js"></script>
<script src="main.js"></script>
PS所有三个文件都在同一个目录中
为了
ajax请求带有两个文件附件的此类表单,我将先前的请求更改为