Subir y enviar ficheros por mail (Java).
Es un requerimiento bastante común realizar un formulario web para enviar mails con adjuntos a otras personas.
El api que proporciona Java para el envio de emails no es muy complicado pero aún así es un poco tedioso empezar con él.
He creado un wrapper del api de envio de mail de java para que este proceso nos resulte mucho más fácil.
El wrapper permite:
/*Indicar el host que nos hará de relay del correo*/ gestorMail.setHost("192.168.200.239"); /*Establecer el campo FROM*/ gestorMail.setFrom(valorCampo); /*Mandar un correo a varias personas*/ String paras[] = valorCampo.split(","); //puede mandarse el emal a varias direcciones for (int k=0; k < paras.length ; k++){ gestorMail.addToAddress(paras[k],paras[k]); //añadimos la direccion } /*Establecer un asunto y un mensaje*/ gestorMail.setAsunto(valorCampo); gestorMail.setMensaje(valorCampo); /*Adjuntar ficheros*/ File fichero1 = new File("C:\\temp\\emails\\"+nombreFichero); gestorMail.attach(fichero1); gestorMail.attach(fichero2); /*Controlar el envio*/ int control=gestorMail.enviarMail(); |
El proceso de upload de ficheros no es muy intuitivo si no se ha visto nunca. Os presento aquí el código necesario
para realizar un upload de ficheros en jsp.
boolean isMultipart = FileUpload.isMultipartContent(request); List parametrosMultiPart = null; DiskFileUpload upload = new DiskFileUpload(); parametrosMultiPart = upload.parseRequest(request); Iterator itr = parametrosMultiPart.iterator(); Hashtable tablaParametros = new Hashtable(); File ficheroAdjunto =null; while (itr.hasNext()) { FileItem item = (DefaultFileItem) itr.next(); if (item.isFormField()) { // Buscamos campos de formulario tipo textarea, input. String nombreCampo = item.getFieldName(); // obtenemos el nombre del campo y su valor String valorCampo = item.getString(); if (nombreCampo!= null && nombreCampo.equals("de")){ gestorMail.setFrom(valorCampo); }else if (nombreCampo!= null && nombreCampo.equals("para")){ String paras[] = valorCampo.split(","); //puede mandarse el emal a varias direcciones //separadas por comas for (int k=0; k < paras.length ; k++){ gestorMail.addToAddress(paras[k],paras[k]); //añadimos la direccion } }else if (nombreCampo!= null && nombreCampo.equals("asunto")){ gestorMail.setAsunto(valorCampo); }else if (nombreCampo!= null && nombreCampo.equals("mensaje")){ gestorMail.setMensaje(valorCampo); } } else {//case file //Objeto que guardara el fichero para ser utilizado más adelante cajonNombres.add(item.getName()); if( item.getName()!=null && !item.getName().equals("") ) { String nombreFichero = item.getName().substring(item.getName().lastIndexOf("\\")+1); File fichero = new File("C:\\temp\\emails\\"+nombreFichero); item.write(fichero); gestorMail.attach(fichero); } } }//fin while |
El código entero (tanto el upload de ficheros como el wrapper de la api de java) os lo podéis descargar de aquí.