Les comento brevemente.
Estoy intentando enviar un mail con la librería PHPMailer y 'sufro' toda clase de contratiempos.
- En primer lugar, unas veces el mail llega sin mensaje y otras con mensaje.
- Otro fallo, es que no siempre recoge las variables que le paso, como por ejemplo con el fichero adjunto, que lo envía bien, pero siempre como: 'NONAME'
- Otra cosa que hace, es no validar el envío del mail, es decir, aunque siempre lo envíe, a su manera, lo envía, sin embargo, para PHPMailer siempre es !$respuesta, con lo que lo envía las veces indicadas en el 'while'.
Espero que alguien pueda echarme una mano.
Muchas gracias.
Saludos
Código PHP:
<?php
session_start();
require_once('libs/phpmailer.inc.php');
require_once('constantes.php');
if(isset($_POST['f_contacto'])) { // comprobamos si se trata de la recepción del formulario
// extraemos los valores del formulario
extract($_POST);
// recogemos el fichero en la variable
$fichero = $_FILES['imagen']['name'];
$fichero_1 = $_FILES['imagen'];
$allowedExtensions = array("jpg", "jpeg", "gif", "png", "doc", "pdf");
$tipo = end(explode('.',$fichero));
// definimos la referencia
$referencia = str_replace(' ','',$nombre).str_replace(' ','',$apellidos).'_'.date('Ymd').'_'.date('His');
//creamos nombre de la imagen
$n_imagen = $referencia.'.'.$tipo;
$destino = '../../../uploaded_files/'.$n_imagen;
if(in_array($tipo,$allowedExtensions)) {
// verificamos si se ha subido el fichero
if(is_uploaded_file($_FILES['imagen']['tmp_name'])){
if(@copy($_FILES['imagen']['tmp_name'],$destino)) {
$mensaje .= '<b>FORMULARIO RECIBIDO</b><br>';
$mensaje .= '<b>Ref: '.$referencia.'</b><br>';
$mensaje .= 'Se ha recibido un formulario con la siguiente información:<br>';
$mensaje .= '<b>Nombre:</b> '.$nombre.'<br>';
$mensaje .= '<b>Apellidos:</b> '.$apellidos.'<br>';
$mensaje .= '<b>Teléfono:</b> '.$tfno.'<br>';
$mensaje .= '<b>Mail:</b> '.$mailTo.'<br>';
$mensaje .= '<b>Nombre Fichero Original:</b> '.$fichero.'<br>';
$mensaje .= '<b>Nombre Fichero:</b> '.$n_imagen.'<br>';
$mensaje .= '<b>Ruta Imagen: </b>'.$destino.'<br>';
$mensaje .= '<b>Mensaje:</b> '.$f_mensaje;
$mail = new phpmailer(); // se instancia la clase, para crear el mail
$mail->Mailer = 'mail';
$mail->From = '[email protected]'; // dirección de envío
$mail->FromName = 'Nombre'; // nombre del remitente
$mail->Sender = $mailTo;
$mail->Timeout = 120; // se ajusta el timeout a 120
if($imagen != 'none') {
$mail->AddAttachment($destino, $n_imagen); // añadimos el archivo adjunto
}
$mail->AddAddress('[email protected]'); // dirección de destino
$mail->Subject = 'Solcitud de información web - Ref: '.utf8_decode($referencia); // asunto del mail
$mail->Body = $mensaje; // mensaje HTML
$mail->WordWrap = 50;
$mail->IsHTML(true);
$respuesta = $mail->Send(); // envío del mail
$intentos = 0; // contador de intentos
while((!$respuesta) && ($intentos < 5)) {
sleep(5);
$exito = $mail->Send();
$intentos = $intentos + 1;
}
if(!$respuesta) {
echo "<p>No se ha podido enviar el mail, inténtelo de nuevo más tarde.</p>";
echo "<p>Muchas Gracias</p>";
}else{
echo "<p>El mail se ha enviado correctamente</p>";
echo "<p>Muchas Gracias</p>";
}
}else{
echo "Error al crear el fichero";
}
}else{
echo 'Error al subir el fichero';
}
}else{
echo '<p>Archivo no permitido. Los tipos de archivo permitidos son:</p>';
echo '<p>jpg - jpeg - gif - png - doc - pdf</p>';
}
}else{
echo "Ha ocurrido un error al enviar el mail. Reinténtelo de nuevo más tarde.";
}
?>