Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Java / Proyectos / Envío de correo con JavaMail/Netbeans

Envío de correo con JavaMail/Netbeans

Autor jc mouse Jueves, Mayo 10, 2012

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java.
JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia]

¿Qué necesitamos?

  • JavaMail 1.4.5
  • Java y Netbeans 6.9 o superior
  • Una cuenta gmail y otra en hotmail
Nivel: Básico/Intermedio
Tiempo:  15 minutos
1. Crea un proyecto en Netbeans (proyecto nombre: JMail ), añade una JFrame (nombre: interfaz.java), ademas crea dos clases (JCMail.javaSMTPAuthenticator.java), la interfaz del proyecto debe tener la siguiente forma:
Diseño Interfaz
OJO con los nombres.
2. Agrega las librerías de JavaMail al proyecto.
3. La clase SMTPAuthenticator.java, tiene el siguiente código:
package jmail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
public class SMTPAuthenticator extends Authenticator{

    private String SMTP_AUTH_USER = "";
    private String SMTP_AUTH_PWD = "";

public SMTPAuthenticator() {}

public SMTPAuthenticator(String user , String pass) {
    this.SMTP_AUTH_USER = user;
    this.SMTP_AUTH_PWD = pass;
}

 @Override
public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(this.SMTP_AUTH_USER, this.SMTP_AUTH_PWD);
}
}
4. La clase JCMail.java, encargada del envío del mensaje tiene por código:
package jmail;
import java.util.Date;
import javax.mail.Message;
import javax.mail.Session;
import java.util.Properties;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.swing.JOptionPane;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
public class JCMail {

    private String from = "";//tu_correo@gmail.com
    private String password = "";//tu password: 123456 🙂
    // destinatario1@hotmail.com,destinatario2@hotmail.com, destinatario_n@hotmail.com
    private InternetAddress[] addressTo;
    private String Subject = "";//titulo del mensaje
    private String MessageMail = "";//contenido del mensaje

    public JCMail(){}

    public void SEND()
    {
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.user", "usuario");
            props.put("mail.smtp.port", 25);
            //
            SMTPAuthenticator auth = new SMTPAuthenticator( getFrom(), getPassword() );
            Session session = Session.getDefaultInstance(props, auth);
            session.setDebug(false);
            //Se crea destino y origen del mensaje
            MimeMessage mimemessage = new MimeMessage(session);
            InternetAddress addressFrom = new InternetAddress( getFrom() );
            mimemessage.setFrom(addressFrom);
            mimemessage.setRecipients(Message.RecipientType.TO, addressTo);
            mimemessage.setSubject( getSubject() );
            // Se crea el contenido del mensaje
            MimeBodyPart mimebodypart = new MimeBodyPart();
            mimebodypart.setText( getMessage() );
            mimebodypart.setContent( getMessage() , "text/html");
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(mimebodypart);            
            mimemessage.setContent(multipart);            
            mimemessage.setSentDate(new Date());
            Transport.send(mimemessage);
            JOptionPane.showMessageDialog(null, "Correo enviado. Enjoy!!!");
        } catch (MessagingException ex) {
            System.out.println(ex);
        }

    }
    //remitente
    public void setFrom(String mail){ this.from = mail; }
    public String getFrom(){ return this.from; }
    //Contraseña
    public void setPassword(char[] value){
        this.password = new String(value);
    }
    public String getPassword(){ return this.password; }
    //destinatarios
    public void setTo(String mails){
        String[] tmp =mails.split(",");
        addressTo = new InternetAddress[tmp.length];
        for (int i = 0; i < tmp.length; i++) {
            try {
                addressTo[i] = new InternetAddress(tmp[i]);
            } catch (AddressException ex) {
                System.out.println(ex);
            }
        }
    }
    public InternetAddress[] getTo(){ return this.addressTo; }
    //titulo correo
    public void setSubject(String value){ this.Subject = value; }
    public String getSubject(){ return this.Subject; }
    //contenido del mensaje
    public void setMessage(String value){ this.MessageMail = value; }
    public String getMessage(){ return this.MessageMail; }

}
5. Para terminar, implementar la clase JCMail en la interfaz.
JCMail mail = new JCMail();

private void cmdSENDActionPerformed(java.awt.event.ActionEvent evt) {                                        
        mail.setFrom( this.txtFROM.getText() );
        mail.setPassword( this.txtPWD.getPassword() );        
        mail.setTo( this.txtTO.getText() );
        mail.setSubject( this.txtSUBJECT.getText() );
        mail.setMessage( this.txtMESSAGE.getText() );
        mail.SEND();
}
Ejecuta y manda el mensaje, texto plano o etiquetas HTML, tambien para enviar a varios destinatarios, escribe los correos separados por una coma.
correo java
Proyecto Netbeans HERE

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Tabla para inventarios de Entradas y Salidas

Tabla para inventarios de Entradas y Salidas

A veces navegando en la internet buscando novedades , investigando o simplemente perdiendo el tiempo 🙂 se encuentran cos...

Insert, Update, Delete con Access y C#

Insert, Update, Delete con Access y C#

En un post anterior vimos la forma de conectarnos a una base de datos Access con C#, pero de nada nos sirve solo conecta...

Recortar partes de una imagen con el mouse

Recortar partes de una imagen con el mouse

En este oportunidad comparto una pequeña aplicación hecha en java para recortar partes de una imagen seleccionado con el...

Crea una libreria TimeChooser – Selector de Tiempo

Crea una libreria TimeChooser – Selector de Tiempo

En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci...

Formulario de autenticación circular

Formulario de autenticación circular

En este tutorial crearemos un formulario de logueo de forma circular usando el lenguaje java y el IDE de Netbeans. Neces...

Blog MVC – El theme y primer controlador [p3]

Blog MVC – El theme y primer controlador [p3]

Tercera parte del tutorial [Crea tu blog con el patrón MVC y php] En este post trabajaremos en el Theme del blog, agrega...

53 comentarios en “Envío de correo con JavaMail/Netbeans”

  1. Daniel dice:

    deberías de subir las librerías pues amigo 🙁

    1. Mouse dice:

      Pero bajate de su web son 2MB nada más 🙂

  2. nitram dice:

    muchas gracias!!!
    he estado checando tu blog!!
    y veo que me podra ayudar con mis futuros problemas, ya que me ayudado con unos del pasado!!

    saludos desde mexico!!

  3. wilberth dice:

    hola excelentes proyectos he implementado bastante el mioo gracias a toda esa informaciòn valiosa sigue asì con nuevos y novedosos proyectasos se le abona parce.

  4. Do-nata dice:

    hola una consulta, implemente todo y pues solo es de gmail a hotmail? por envie un mensaje de hotmail a gmail , hotmail a hotmail y nada! espero tu respuesta.
    Gracias

    1. Mouse dice:

      Fíjate que estamos utilizando un servidor de GMAIL

      props.put(“mail.smtp.host”, “smtp.gmail.com”);

      si quieres enviar de HOTMAIL a otros correros o a hotmail mismo, debes utilizar un servidor de Hotmail, el proceso de envío es el siguiente:

      PROGRAMA JAVA -> SE CONECTA A SERVIDOR GMAIL -> GMAIL AUTENTICA USUARIO -> ENVIA CORREO A DESTINO

      1. Darien dice:

        pero como le ago para enviar a gmail D: es que mi profe me lo pide con gmail XDD

        1. Darien dice:

          a y lo otro cual es el metodo que envia el correo es que tengo que hacer un programa que cuando se cumpla un requisito envie un correo entonces necesito saber cual es el metodo que envia para llamarlo desde un controlador D: desde ya muxas gracias n.n

          1. Mouse dice:

            pues esta claro es SEND 😉 pero antes debes añadir los demas requisitos, destinatario y remitene, es por eso que lo hice usando una interfaz, en el boton “cmdSENDActionPerformed” esta todo lo que pides 🙂

        2. Mouse dice:

          pues lo mismo, colocas destinatario un mail de gmail y ya, este ejemplo utiliza un servidor de gmail, otra cosa es si quieres enviar de hotmail a gmail, utilizas un servidor de hotmail.

          1. root.sys dice:

            hahahahaha algunos no te pillan con lo del servidor de hotmail y esta mas claro que el agua casi casi enfrente de ellos, amigo gracias por tus proyectos me han ayudado para resolver algunas dudas, muy buenos proyectos eh.

  5. Elberth dice:

    Excelente blog hermano, saludos desde cali colombia

  6. Gerardo dice:

    Ola amigo tengo una duda soy nuevo en esto y pues esto si que me intereso esto se puede hacer con cuenta de hotmail o a fuerza tiene que ser gmail.

    otra duda en donde dice:
    private InternetAddress[] addressTo;

    tengo que colocar el remitente dentro de los corchetes o donde

    ayuda porfa

    1. Mouse dice:

      ya lo dije en un comentario anterior, si quieres enviar correo desde hotmail, debes utilizar un servidor de hotmail, busca en San Google 🙂

      la variable addressTo es para colocar varios correos de destino, osea addresTo[0]=’correo1@mail.com’, addresTo[1]=’correo2@mail.com’,etc

      1. cristian ruiz dice:

        cordial saludo desde colombia

        estoy ensallandolo y entiendo algo de la logica muchas gracias mouse por tu buen tuto
        compilando el netbeans me sale :
        avax.mail.MessagingException: Could not convert socket to TLS;
        nested exception is:
        javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

        que puedo estar haciendo mal?
        saludos y gracias por la ayuda

  7. Juan dice:

    Bueno Mouse muy bueno tu post me ayuda bastante con el proyecto que deseo hacer, pero no se si pudieras realizar un post donde el aplicativo permita enviar y recibir(leer) correos electronicos en el mismo aplicativo desde ya muchas… espero tu posible solucion… gracias desde peru

    1. Mouse dice:

      🙂 gracias, y si, ya me lo pidieron, pero por el momento e estado corto de tiempo, pero más adelante sin duda

  8. Jerzon dice:

    Ya logre solucionar mi problema, con una molestia no podrías hacer un ejemplo de enviar correo, pero con archivos adjuntos..

    1. Mouse dice:

      pues si, en un futuro, es que ahora ya tengo prometido otro tuto que aún no empiezo 🙂 y lo debo de hace tiempo

  9. orlando dice:

    amigo me sale este error que tiene que ver con el puerto

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
    nested exception is:
    java.net.ConnectException: Connection timed out: connect

    espero prontas respuestas y gracias por compartir tus sabios conocimientos

    1. Mouse dice:

      :/ pues no se, podrías probar con otro puerto como el 465

  10. Oscar dice:

    Hola Mouse muchas gracias tu post me ayudo muchísimo pero me surgió una duda: ¿se pueden adjuntar archivos?

    1. Mouse dice:

      en la documentación dice que si, no lo e probado

  11. Ignacio Fiesco dice:

    Es posible enviar el correo con autenticacion integrada windows?

    1. Mouse dice:

      :/ pues no se, no lo intente, lo siento no poder ayudarte más

  12. oliver dice:

    saludos

    a mi me produce el siguente error cuando le doy a enviar despues de introducidos los datos

    este es el erro:

    javax.mail.SendFailedException: Invalid Addresses;
    nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 553-5.1.2 We weren’t able to find the recipient domain. Please check for any
    553-5.1.2 spelling errors, and make sure you didn’t enter any spaces, periods,
    553 5.1.2 or other punctuation after the recipient’s email address. wc15sm1395679vdb.4

    1. Mouse dice:

      por lo que se entiende la dirección que utilizas es invalida :/ comprueba que los datos sean correctos y que no tengan espacios

  13. Patricio Mansilla dice:

    Hola Mouse buenas tardes, te queria consultar por un mensaje que me sale: javax.mail.MessagingException: 502 5.5.1 Unrecognized command. l25sm17639053yhk.8
    Serias tan amable de poner un enlace para bajar el codigo fuente en un jar. Desde ya muchas gracias. Saludos.

  14. stigmas dice:

    oye me sale este error y no se como solucionarlo :/ me puedes ayudar

    javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
    nested exception is:
    java.net.SocketException: Permission denied: connect

  15. bery dice:

    Hola mouse,se puede hacer esto con un dominio,creado por mi,estoy haciendo en open suse(Linux),ya me cree mi dominio y necesito una aplicacion java que me reciba cualquier correro y yo enviar a otros correro,no se como comenzar,espero tu ayuda

    1. Mouse dice:

      este tuto trata de envio de mail utilizando los servidores de hotmail y gmail , para hacer que lo quieres tu pc tendría que ser el servidor o instalarte un servidor SMTP

  16. Anchel dice:

    bro estuve revisando tu blog, y estuve aplicando esta tecnica que dejaste,
    a la hora de correr el programa me deja este mensaje el netbeans

    javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    creo que puede ser una libreria que puede faltar para agregar el certificado del smtp

    que me puedes aconsejar ??

    1. Mouse dice:

      :/ creo que se debe al servidor smtp

  17. Leonardo dice:

    Mouseeee buenass, nesecito un ejemplo de uno para poder mandar sms masivos a celulares por medio de una dataCard que te da el ISP 🙁

  18. George dice:

    mouse, está bueno tu programa, lo quise hacer pero me sale un mensaje en el sistema y no aparece el jpane
    com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. t9sm17966608yhh.0 – gsmtp

  19. George dice:

    ya resolví el problema, simplemente era cambiar el puerto de 25 a el 537 que también puede funcionar.

    1. Jesús Castillo dice:

      Probé con el puerto 537, 25 y 465. ¿Alguien tendrá mas documentación acerca de esto de los puertos?. Ninguno me ha funcionado…Necesito ayuda. Utilizo el paquete “javax.mail.jar”

  20. VIANEY VARGAS dice:

    este mouse es el mejor gracias men si que te he aprendido con todo tus proyectos sigue asi y que Dios te de mas conocimiento para que los sigas compartiendo

  21. guillermo dice:

    tienes un ejemplo para leer de un correo gmail..o es el mismo proceso que se utiliza para el envio

  22. Rodolfo dice:

    quisiera saber como tomar los contactos desde una base de datos, y poder enviar un reporte de access

  23. Chesx dice:

    Simplemente este es un excelente tutorial para finalmente entender la logica del envio de correos electronicos a traves de java. Me sirvio mucho y es una base muy importante. Gracias!!!!

  24. JOMAB dice:

    Una pregunta, con codigo, puedes averiguar si el receptor del correo recibio o leyo el correo?? podrias implementar eso?

    1. Mouse dice:

      el servidor te avisa si el correo fue enviado o si ocurrió algún problema, pero si quieres saber si el email fue abierto, eso solo con algún troyano :/

      1. JOMAB dice:

        Exacto, el server avisa si el correo fue enviado exitosamente, de lo contrario te devuelve una excepcion de correo, ahora bien, hay una pag en la web que se llama whoreadme.com esta incrusta una imagen oculta al correo, y esta quien sabe como le hace pero te envia un correo a tu email configurado a esta pag. que el usuario abrio el correo, es asi como que yo quisiera que cuando la img incrustada se cargue en el correo, valla a recojer los datos del correo (email) que lo abrio y valla como que ha hacer un insert a una db publica en la web (mia).. que se yo como.!! pero necesito hacer algo parecido a eso. :S

  25. Miry dice:

    hola yo lo hice y me salio perfecto pero no se porq ahora ya no lo envia quisiera q me ayudaras, creo q puede ser por que me abre el correo como outlook espero q me puedas ayudar

  26. JOMAB dice:

    Solo una pregunta, si yo mando la dirección de un Servlet con ‘x’ parámetros por correo y si le da clic dentro del correo a un link que contiene la url de este Servlet, el Servlet le puede retornar al cuerpo del correo text/html para que visualice ‘x’ asunto??? Perdon por la redundancia.. Ej. en el cuerpo del correo va lo siguiente clic cuando le da clic a ‘clic’ entonces en vez de que se abra una nueva pagina y lo pinte alli, quiero que se pinte lo que devuelve el Servlet..!!! Se podra?????? :S

  27. JOMAB dice:

    Creo que se borro el código que puse pero era algo asi href “ipolocalhost:puerto/nombreServlet?parametro=valor” clic

  28. David dice:

    hola, recien soy novato en esto pero quisiera que me sacaras de duda en donde exactamente va el codigo del paso 5, gracias de antemano!

  29. Jesús Castillo dice:

    He probado con los puertos 537, 25 y 465. ¿Alguien tendrá mas documentación acerca de esto de los puertos?. Ninguno me ha funcionado…Necesito ayuda. Utilizo el paquete “javax.mail.jar”

    1. Jesús Castillo dice:

      Ok ya he dado con el problema (para los que aún tienen el problema o error de puerto), lo he solucionado cambiando el código del puerto a: 587. Es decir, en la clase java “JCMail” en la parte donde está: “props.put(“mail.smtp.port”, 587);” //COLOQUEN 587

  30. Jesús Castillo dice:

    Ok ya he dado con el problema (para los que aún tienen el problema o error de puerto), lo he solucionado cambiando el código del puerto a: 587. Es decir, en la clase java “JCMail” en la parte donde está: “props.put(“mail.smtp.port”, 587);” //COLOQUEN 587

  31. cristian ruiz dice:

    EL ERROR COMUN:

    javax.mail.MessagingException: Could not convert socket to TLS;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    ES DEBIDO A EL ANTIVIRUS AVAST O EL FIREWALL DESABILITALO Y FUNCIONA PERFECTO …… MUCHAS GRACIAS MOUSE…………EXELENTE

Los comentarios están cerrados para este post
Comparte lo que sabes

Categorias

Últimas entradas

“Material Design es una guía integral para el diseño visual, de movimientos y de interacción en distintas platafor...

Un TextView autocompletado nos facilita el ingreso de información en aplicaciones móviles ya que te muestra posibles opc...

Un Tabbed Activity te permite cambiar la vista entre  fragmentos desplazando el dedo  de izquierda a derecha o de derech...

Este 12 de Mayo de 2017 se produjo un ataque masivo mundial del ransomware WannaCry  el  que afecto a más de 200000 comp...

Android Bolivia

Bandera en Alto