----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
En las dos entradas anteriores mostré la forma de enviar un mail y enviar un mail con un archivo adjunto. Los datos a utilizar estaban definidos de forma estática y era simplemente para demostración. En esta ocasión dejo el código que ya he modificado para volverlo más general y se puedan usar variables y parámetros para utilizarlo en una interfaz gráfica.
A continuación dejo en código.
/* @author marxs7
* basado en código de Chuidiang
* En este ejemplo se usa Gmail pero pueden utilizar cualquier servidor
* solo remplacen los valores asignados a servidorSMTP Y puertoEnvio.
*/
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class EnviarCorreoMejorado
{ String miCorreo;
String miPassword;
String servidorSMTP="smtp.gmail.com";
String puertoEnvio="587";// puertoEnvio="587";//465 para mensajes normales y 587 con adjuntos
String[] destinatarios;
String asunto;
String cuerpo = null;//cuerpo del mensaje
String[] archivoAdjunto;
public EnviarCorreoMejorado(String usuario,String pass,String[] dest,String asun,String mens,String[] archivo){
destinatarios=dest;
asunto=asun;
cuerpo=mens;
archivoAdjunto=archivo;
miCorreo=usuario;
miPassword=pass;
}
public void Enviar() throws MessagingException
{
Properties props=null;
props = new Properties();
props.put("mail.smtp.host", servidorSMTP);
props.setProperty("mail.smtp.starttls.enable", "true");//si usa Yahoo comentar esta linea
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.user", miCorreo);
props.setProperty("mail.smtp.auth", "true");
SecurityManager security = System.getSecurityManager();
Authenticator auth = new EnviarCorreoMejorado.autentificadorSMTP();
Session session = Session.getInstance(props, auth);
// session.setDebug(true); //Descomentar para ver el proceso de envio detalladamente
// Se compone la parte del texto
BodyPart texto = new MimeBodyPart();
texto.setText(cuerpo);
// Se compone el adjunto
BodyPart[] adjunto=new BodyPart[archivoAdjunto.length];
for(int j=0;j<archivoAdjunto.length;j++){
adjunto[j]=new MimeBodyPart();
adjunto[j].setDataHandler(
new DataHandler(new FileDataSource(archivoAdjunto[j])));
String[] rutaArchivo = archivoAdjunto[j].split("/");//separamos las palabras que forman la url y las ponemos en arreglo de cadenas
int nombre=rutaArchivo.length-1;//del array buscamos la ultima posicion
adjunto[j].setFileName(rutaArchivo[nombre]);//la ultima posicion debe tener el nombre del archivo
}
// Una MultiParte para agrupar texto e imagen.
MimeMultipart multiParte = new MimeMultipart();
multiParte.addBodyPart(texto);
for(BodyPart aux:adjunto){
multiParte.addBodyPart(aux);
}
// Se compone el correo, dando to, from, subject y el
// contenido.
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(miCorreo));
Address []destinos = new Address[destinatarios.length];//Aqui usamos el arreglo de destinatarios
for(int i=0;i<destinos.length;i++){
destinos[i]=new InternetAddress(destinatarios[i]);
}
message.addRecipients(Message.RecipientType.TO, destinos);//agregamos los destinatarios
message.setSubject(asunto);
message.setContent(multiParte);
// Se envia el correo.
Transport t = session.getTransport("smtp");
t.connect(miCorreo, miPassword);
t.sendMessage(message, message.getAllRecipients());
System.out.println("Correo Enviado exitosamente!");
t.close();
}
private class autentificadorSMTP extends javax.mail.Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(miCorreo, miPassword);
}
}
}
Cualquier duda o pregunta déjenla en los comentarios. Si necesitan las librerías o servidores y puertos SMTP pueden encontrarlos en la Primer entrada acerca de Java Mail.
En la próxima publicación se implementará un parámetro extra para poder definir el servidor de correo dinámicamente.
Hola, me podrias asesorar paso a paso como lo puedo hacer.
ResponderEliminarSaludos
En que necesitas ayuda?
EliminarMe dejaron hacer un aplicatico que envie correos con archivos adjuntos pero dichos correos los tiene que tomar una base de datos.
EliminarTe explico brevemente para ver si me puedes ayudar:
El aplicativo tiene que llevar 3 pantallas
1era. pantalla: es el login: te logeas y de ahi de envia a la segunda pantalla
2da pantalla: en esta tiene que decirte que deseas enviar un txt, una imagen o etc, dar clic en imagen y de ahi que te despliegue una ventana donde tomar el archivo y despues pasar a la ventana 3
3ra ventana: en esta ventana que te diga si es aun un correo o a varios, y los usuarios los tiene que tomar de una base de datos donde uno tenga dichas direcciones de correo y despues pasar a la ventana 4
4ta ventana: desplegar una notificacion que diga que se envio satisfactoriamente.
Crees que sea dificil! es un proyecto final. me puedes ayudar.!!!
Gracias.
Saludos
No es muy difícil. Puedes descargar los archivos que aparecen al inicio de la publicación, son las aplicaciones que hice y sirven para enviar correos. Prácticamente tiene las funciones que dices a excepción de tomas los correos de una base de datos pero considero que no es muy difícil de hacer.
EliminarOk, de los cuatro archivos que estan en la publicación, cual es el que envia correos con archivo adjunto.
EliminarMe parece que todos
EliminarYa probe y funciona bien, una duda el codigo que esta en la publicación es el mismo del aplicativo para que puedo manipularlo o solo con copiar y pegarlo en un proyecto de netbeans funciona???
EliminarHola Marcial Ramirez , me podrias enviar a mi correo el codigo de la aplicacion para enviar correo desde una cuenta de outlook, este es mi correo andres_baranc@outlook.com Muchas gracias
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola, Yo deseo enviar 3 archivos Adjuntos (Imagen, Texto y PDF) todo por separado pero en el mismo correo, en el ejemplo solo he visto imagen + texto, Me podrías explicar cómo lo puedo hacer? Trato de añadir un archivo adjunto cómo los 2 anteriores, pero al enviar me sale un error.
ResponderEliminarGracias
Este codigo recibe un arreglo de cadenas para los adjuntos. Tendrias que guardar en el arreglo la ruta de tu imagen y la ruta de tu pdf. Puedes enviar 2 o mas adjuntos y debe funcionar
Eliminarpublic EnviarCorreoMejorado(String usuario,String pass,String[] dest,String asun,String mens,String[] archivo)
En dónde se guarda la ruta de los archivos?. Por favor, necesito ayuda no he podido hacerlo funcionar
EliminarPara que el código funcione debes pasar un arreglo del tipo cadena con la ruta de tus archivos. Estas rutas las puedes definir estáticamente o leyéndolas desde consola o con un cuadro de dialogo. Este código lo hice hace 8 años en java 7, no estoy seguro si aún funciona en la versión más reciente de Java
EliminarCreeme que aun funciona JavaMail como lo estás poniendo, sólo me podrías dar un ejemplo de como pasar el arreglo en tu código, por favor... 👏🏻
EliminarHola me podrias compartir tu codigo de la aplicacion? mi correo es mauri0227@hotmail.com
ResponderEliminarGenial, me sirvió e mucho y pude adjuntar n archivos, mis gracias por los aportes.
ResponderEliminarMe podrías ilustar como por favor, he tratado pero no lo he logrado.
Eliminar