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?
package jmail; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * @web https://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); } }
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 https://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; } }
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(); }
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! :)
VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ ...
Java ha ido evolucionando a pasos agigantados en los últimos años gracias al pedido de su comunidad global de programado...
Firebase es la plataforma para el desarrollo de aplicaciones web y aplicaciones móviles de Google el cual se centra en e...
En este videotutorial se vera la creación de Interfaces Gráficas de Usuario (GUI) utilizando MatLab GUIDE herramienta vi...
La clase de java DatabaseMetaData nos permite obtener información exhaustiva sobre una base de datos, para ser más exact...
En este post, crearemos una aplicación java que nos permita arrastrar un archivo excel hacia la aplicación, abrirlo y ca...
Los comentarios estan cerrados
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...
deberías de subir las librerías pues amigo 🙁
Pero bajate de su web son 2MB nada más 🙂
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!!
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.
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
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
pero como le ago para enviar a gmail D: es que mi profe me lo pide con gmail XDD
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
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 🙂
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.
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.
Excelente blog hermano, saludos desde cali colombia
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
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
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
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
🙂 gracias, y si, ya me lo pidieron, pero por el momento e estado corto de tiempo, pero más adelante sin duda
Ya logre solucionar mi problema, con una molestia no podrías hacer un ejemplo de enviar correo, pero con archivos adjuntos..
pues si, en un futuro, es que ahora ya tengo prometido otro tuto que aún no empiezo 🙂 y lo debo de hace tiempo
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
:/ pues no se, podrías probar con otro puerto como el 465
Hola Mouse muchas gracias tu post me ayudo muchísimo pero me surgió una duda: ¿se pueden adjuntar archivos?
en la documentación dice que si, no lo e probado
Es posible enviar el correo con autenticacion integrada windows?
:/ pues no se, no lo intente, lo siento no poder ayudarte más
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
por lo que se entiende la dirección que utilizas es invalida :/ comprueba que los datos sean correctos y que no tengan espacios
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.
http://link.jc-mouse.net/?id=JCMG145KJT
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
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
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
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 ??
:/ creo que se debe al servidor smtp
Mouseeee buenass, nesecito un ejemplo de uno para poder mandar sms masivos a celulares por medio de una dataCard que te da el ISP 🙁
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
ya resolví el problema, simplemente era cambiar el puerto de 25 a el 537 que también puede funcionar.
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»
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
tienes un ejemplo para leer de un correo gmail..o es el mismo proceso que se utiliza para el envio
quisiera saber como tomar los contactos desde una base de datos, y poder enviar un reporte de access
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!!!!
Una pregunta, con codigo, puedes averiguar si el receptor del correo recibio o leyo el correo?? podrias implementar eso?
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 :/
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
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
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
Creo que se borro el código que puse pero era algo asi href «ipolocalhost:puerto/nombreServlet?parametro=valor» clic
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!
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”
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
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
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