我需要发送带附件的电子邮件,我选择了PHPMailer。我发现我必须使用Body
来使附件正常工作,但我的问题是,如果我使用它,则会重新加载表单并检查是否已发送电子邮件的if
条件。表单重新加载并且没有发生任何事情,它甚至没有重置JavaScript文件中包含的表单。
使用FormData
允许我使用Ajax上传文件:
$(document).ready(function() {
$('#FormularioContato').on('submit', function(e) {
e.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
type: 'POST',
url: 'enviar.php',
dataType: 'json',
contentType: false,
processData: false,
async: false,
cache: false,
data: formData,
success: function (data) {
if (data.tipo !== 'Erro') {
$("#FormularioContato")[0].reset();
$('#Msg').hide().removeClass().addClass(data.tipo).html(data.msg).fadeIn('slow').delay(7000).fadeOut('slow');
} else {
$('#Msg').hide().removeClass().addClass(data.tipo).html(data.msg).fadeIn('slow').delay(7000).fadeOut('slow');
}
}
});
});
});
这是使用PHPMailer发送电子邮件的代码:
$mensagem = '';
$mensagem .= 'Nome: ' . $_post['Nome'];
$mensagem .= 'Email: ' . $_post['Email'];
$mensagem .= 'Telefone Residencial: ' . $_post['Telefone Residencial'];
$mensagem .= 'Telefone Celular: ' . $_post['Telefone Celular'];
$mensagem .= 'Mensagem: ' . $_post['Mensagem'];
$extensoes = array('pdf', 'doc', 'docx');
$extensaoArquivo = pathinfo($_FILES['Arquivo']['name'], PATHINFO_EXTENSION);
$novoNomeArquivo = strtolower(str_replace(' ', '_', $_post['Nome']) . '.' . $extensaoArquivo);
if (in_array($extensaoArquivo, $extensoes)) {
if (move_uploaded_file($_FILES['Arquivo']['tmp_name'], 'uploads/' . $novoNomeArquivo)) {
$mailer->ContentType = "Content-type: text/html; charset=utf-8";
$mailer->setFrom($_post['Email'], $_post['Nome']);
$mailer->addAddress("email@example.com");
$mailer->Subject = 'Trabalhe conosco - ' . $_post['Nome'];
$mailer->isHTML(true)
$mailer->Body($mensagem);
$mailer->addAttachment($_FILES['Arquivo']['tmp_name'], $_FILES['Arquivo']['name']);
if ($mailer->send()) {
echo json_encode(array(
'tipo' => 'Sucesso',
'msg' => 'Mensagem enviada com sucesso.'
));
} else {
echo json_encode(array(
'tipo' => 'Erro',
'msg' => 'Ocorreu um erro ao enviar o e-mail.' . $mailer->ErrorInfo
));
}
} else {
echo json_encode(array(
'tipo' => 'Erro',
'msg' => 'Ocorreu um erro ao enviar o anexo'
));
}
} else {
echo json_encode(array(
'tipo' => 'Erro',
'msg' => 'Arquivo de anexo inválido. Somente PDF, DOC ou DOCX'
));
}