Hola, tengo un formulario HTML el cual, al darle a un boton, llama a una función de Javascript que recoge los datos del form, y los envía a un fichero PHP que envía los datos con PHPMailer. Todo esto iba vien, hasta que he puesto para que se puedan enviar adjuntos un input type file. Al principio,en la función Send() de AJAX escribía cada dato de la siguiente forma "dato1="+dato1+"&dato2", etc. Ahora, para mandar los adjuntos, uso la función FormData de la siguiente forma.
Formulario HTML:
Código HTML:
<form name="form" action="#" id='file-form'>
Tema:<br>
<select name="correo">
<option>1</option>
<option>2</option>
</select>
<br><br>
Asunto:<br>
<input type="text" name="asunto">
<br><br>
Cuerpo:<br>
<textarea name="cuerpo" id="cuerpo" style="height: 150px; resize: none;"></textarea>
<input type="file" id='file-select'>
</form>
<br>
<button class="boton" onclick="javascript:enviarcorreo();">Enviar</button>
La función JS:
Código Javascript
:
Ver originalfunction enviarcorreo(){
asunto=document.form.asunto.value;
cuerpo=document.form.cuerpo.value;
correo=document.form.correo.value;
var form = document.getElementById('file-form');
var fileSelect = document.getElementById('file-select');
var files = fileSelect.files;
//Loop through each of the selected files.
for (var i = 0; i < files.length; i++) {
var file = files[i];
formData.append('adjunto', file, file.name);
}
if (cuerpo=='' || asunto==''){
alert('Debe rellenar todos los campos');
}else{
filtroe = '[FILTRO]';
ajax6=objetoAjax();
ajax6.open("POST", "mail2.php",true);
ajax6.onreadystatechange=function(){
if (ajax6.readyState==4) {
var valor = ajax6.responseText;
if (valor==1){
window.location ="index.php";
}else{
alert(valor);
}
}
}
ajax6.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var formData = new FormData();
formData.append("asunto", filtroe + " - " + asunto);
formData.append("cuerpo", cuerpo);
formData.append("correo", correoe);
ajax6.send(formData);
}
}
Y
mail2.php:
Código PHP:
<?php
require ('PHPMailer/class.phpmailer.php');
require ("PHPMailer/class.smtp.php");
$mail = new PHPMailer();
$body = $_POST["cuerpo"];
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "MI HOST"; // SMTP server
$mail->From = "CORREO DESDE EL QUE ENVIA";
$mail->FromName = "NOMBRE";
$mail->Subject = $_POST["asunto"];
$mail->AltBody = "Cuerpo alternativo
para cuando el visor no puede leer HTML en el cuerpo";
$mail->MsgHTML($body);
$mail->AddAddress($_POST["correo"], "Elecciones");
if (isset($_FILES['adjunto']) && $_FILES['adjunto']['error'] == UPLOAD_ERR_OK) {
$mail->AddAttachment($_FILES['adjunto']['tmp_name'],
$_FILES['adjunto']['name']);
}
// si el SMTP necesita autenticación
$mail->SMTPAuth = true;
// credenciales usuario
$mail->Username = "USUARIO";
$mail->Password = "CONTRASEÑA";
$mail->CharSet= 'UTF-8';
if(!$mail->Send()) {
echo "Error al enviar el mensaje: " . $mail*>ErrorInfo;
} else {
echo "1";
}
?>