Ago 25
 

Ya hemos visto como funciona la clase PHPMailer, ahora vamos a ver como adjuntar un archivo.

Como se ve no cambia mucho, sólo hay que escribir un par de líneas más.

Se supone que ya se han subido los archivos al servidor.

La estructura es la siguiente:
Cambiamos un poco el archivo form_contacto.php:
<form id=”id” action=”enviar.php” method=”post” enctype=”multipart/form-data”>
Nombre: <input type=”nombre” value=”" />
Apellidos: <input type=”apellidos” value=”" />
Email: <input type=”email” value=”" />
Consulta: <input type=”consulta” value=”" />
Archivo: <input type=”file” name=”archivo” />
</form>

Creamos el archivo enviar.php que es que va a llamar a la clase PHPMalier y va a realizar el envio:
/*
* Si por ejemplo hemos creado la carpeta classes en raíz,
*hacemos el require poniendo la ruta absoluta hacia la clase
* Estoy suponiendo que el archivo enviar.php (este archivo) esta en raíz
*/
require ($_SERVER['DOCUMENT_ROOT'].”/classes/class.phpmailer.php”);
require ($_SERVER['DOCUMENT_ROOT'].”/classes/language/phpmailer.lang-es.php”);

$mail = new PHPMailer(); //instanciamos un objeto de la clase
$mail->From = $_POST['email']; //ponemos el mail del remitente
$mail->FromName = $_POST['nombre'].” “. $_POST['apellidos'];
$mail->CharSet = “utf-8″;// también podemos elegir la codificación
//de carácteres, para visualizar correctamente el mensaje
$mail->AddAddress(“dsm@dsm-web.es”, “Administrador”);// emails de destino
$mail->Subject = ‘Consulta desde la web…’; //el asunto del mensaje

/*en la variale $body guardamos el texto en HTML, así podremos dar estilo
a nuestros mails*/
$body .= “<p style = ‘font-size:12px’>Contenido de la consulta:<br />”;
$body .= “Nombre y Apellidos: “.$_POST['nombre'].” “.$_POST['apellidos'].” <br />
Correo Electrónico: “.$_POST['email'].” <br />
Consulta: “.$_POST['consulta'].” </p>”;

/* en la variale $text_body guardamos el texto en formato plano, de esta manera
si el cliente de correo no lee formato HTML mostrará el mensaje en
formato de texto*/
$text_body .= “Contenido de la consulta:\r\n”;
$text_body .= “Nombre y Apellidos: “.$_POST['nombre'].” “.$_POST['apellidos'].” \n
Correo Electrónico: “.$_POST['email'].” \n
Consulta: “.$_POST['consulta'].” \n”;

$mail->Body = $body;
$mail->AltBody = $text_body;
// Podemos controlar el tipo de archivos que se pueden adjuntar
/* Aquí teneis los tipos de archivo más comunes
$tipos = array(“application/rar”,
“application/x-rar-compressed”,
“application/arj”,
“application/excel”,
“application/gnutar”,
“application/octet-stream”,
“application/pdf”,
“application/powerpoint”,
“application/postscript”,
“application/plain”,
“application/rtf”,
“application/vocaltec-media-file”,
“application/wordperfect”,
“application/x-bzip”,
“application/x-bzip2″,
“application/x-compressed”,
“application/x-excel”,
“application/x-gzip”,
“application/x-latex”,
“application/x-midi”,
“application/x-msexcel”,
“application/x-rtf”,
“application/x-sit”,
“application/x-stuffit”,
“application/x-shockwave-flash”,
“application/x-troff-msvideo”,
“application/x-zip-compressed”,
“application/xml”,
“application/zip”,
“application/msword”,
“application/mspowerpoint”,
“application/vnd.ms-excel”,
“application/vnd.ms-powerpoint”,
“application/vnd.ms-word”,
“application/vnd.ms-word.document.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.wordprocessingml.document”,
“application/vnd.ms-word.template.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.wordprocessingml.template”,
“application/vnd.ms-powerpoint.template.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.presentationml.template”,
“application/vnd.ms-powerpoint.addin.macroEnabled.12″,
“application/vnd.ms-powerpoint.slideshow.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.presentationml.slideshow”,
“application/vnd.ms-powerpoint.presentation.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.presentationml.presentation”,
“application/vnd.ms-excel.addin.macroEnabled.12″,
“application/vnd.ms-excel.sheet.binary.macroEnabled.12″,
“application/vnd.ms-excel.sheet.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,
“application/vnd.ms-excel.template.macroEnabled.12″,
“application/vnd.openxmlformats-officedocument.spreadsheetml.template”,
“audio/*”,
“image/*”,
“video/*”,
“multipart/x-zip”,
“multipart/x-gzip”,
“text/richtext”,
“text/plain”,
“text/xml”);
*/

if($_FILES['archivo']['type'] == ‘application/msword’){
$mail->AddAttachment($_FILES['archivo']['tmp_name'],$_FILES['archivo']['name']);
}

if(!$mail->Send()){
echo “Error en el envio “.$mail->ErrorInfo. “<br>”;
}else{
echo “Envio realizado con éxito”;
}

// Si tenemos un bucle donde recorremos por ejemplo emails guardados en
//una base de datos,
// limpiamos las direcciones para realizar un único envio por email
$mail->ClearAttachments();
$mail->ClearAddresses();
$mail->ClearBCCs();

En el siguiente POST explicaré como enviar mails desde una base de datos, pudiendo darle formato HTML, al cuerpo del mensaje.


5 comentarios

  • Karlanga | Agosto 26th, 2008 | 7:43 pm:

    esto sigue bien…

  • admin | Agosto 28th, 2008 | 9:15 am:

    En breve continuará…

  • Luigui | Octubre 15th, 2009 | 8:42 pm:

    muy interesante le artículo, sigue así…

    saludos.

  • gabriel | Diciembre 22nd, 2009 | 4:18 am:

    Una consulta como seria el codigo si quisera adjuntar imagenes? Entiendo que para cambiar el tipo de archivos a adjuntar hay que reemplazar esto ‘application/msword’
    Pero por cual aplicacion?
    Si podes publicar un listado de los nombres de las aplicaciones seria fantastico.
    Desde ya muchas gracias!!!

  • Maria | Febrero 25th, 2010 | 12:48 am:

    Grande!! Después de buscar entre un montón de web buscando este código, por fin doy con tu post, cuyo código es el único que me ha funcionado.

    Muchas gracias!!

Escribe tus comentarios