Enviar correo desde Java
Este es un pequeño ejemplo de cómo enviar correos desde Java usando el API de Java Mail. Lo único que necesitaremos es descargar la librería mail.jar de la página de Java Mail y crear un programa de este estilo:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class EnviarMail {
public static void main(String[] args) {
try {
// Se debe crear un archivo de propiedades que
// contenga el nombre del servidor SMTP
Properties props = new Properties();
props.put("mail.host", "mail.servidorcorreo.com");
// se crea un objeto de sesion
Session conexionCorreo = Session.getInstance(props, null);
// este objeto representa el mensaje a enviar
Message mensaje = new MimeMessage(conexionCorreo);
// los objetos Adress contienen informacion de recipientes de correo
Address desde = new InternetAddress("tucorreo@servidorcorreo.biz",
"Pepito Perez");
Address para = new InternetAddress("destinatario@otroservidor.com");
// asignamos el contenido. En este caso usamos 'text/plain' pero
// es posible usar 'text/html' para enviar correos con contenido
// HTML
mensaje.setContent("Este es un mensaje de texto plano!",
"text/plain");
// asignar el origen del correo
mensaje.setFrom(desde);
// asignar un destinatario
mensaje.setRecipient(Message.RecipientType.TO, para);
// asignar el asunto del correo
mensaje.setSubject("Hola, Java Mail!");
Transport.send(mensaje);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Para compilarlo y ejecutarlo desde la consola:
javac -cp mail.jar:. EnviarMail.java
java -cp mail.jar:. EnviarMail
java -cp mail.jar:. EnviarMail
Si estás usando Eclipse, debes añadir la librería mail.jar al classpath. En este artículo explico cómo hacerlo.
21 Comentarios | deja el tuyo





Brother tengo lo siguiente…pero no me envia el mail al correo
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class MailSender {
public static void main() {
try {
// Se debe crear un archivo de propiedades que
// contenga el nombre del servidor SMTP
Properties props = new Properties();
props.put(“mail.host”, “mail.servidorcorreo.com”);
// Nombre del host de correo, es smtp.gmail.com
props.setProperty(“mail.smtp.host”, “smtp.gmail.com”);
// TLS si está disponible
props.setProperty(“mail.smtp.starttls.enable”, “true”);
// Puerto de gmail para envio de correos
props.setProperty(“mail.smtp.port”,”587″);
// Nombre del usuario
props.setProperty(“mail.smtp.user”, “sdao32@gmail.com”);
// Si requiere o no usuario y password para conectarse.
props.setProperty(“mail.smtp.auth”, “true”);
// se crea un objeto de sesion
Session conexionCorreo = Session.getInstance(props, null);
// este objeto representa el mensaje a enviar
Message mensaje = new MimeMessage(conexionCorreo);
// los objetos Adress contienen informacion de recipientes de correo
Address desde = new InternetAddress(“sdao32@gmail.com”,
“Pepito Perez”);
Address para = new InternetAddress(“sdao32@hotmail.com”);
// asignamos el contenido. En este caso usamos ‘text/plain’ pero
// es posible usar ‘text/html’ para enviar correos con contenido
// HTML
mensaje.setContent(“Este es un mensaje de texto plano!”,
“text/plain”);
// asignar el origen del correo
mensaje.setFrom(desde);
// asignar un destinatario
mensaje.setRecipient(Message.RecipientType.TO, para);
// asignar el asunto del correo
mensaje.setSubject(“Hola, Java Mail!”);
Transport.send(mensaje);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Help please!!!
Buenas, ami me da el siguiente error:
javax.mail.MessagingException: Can’t send command to SMTP host;
nested exception is:
java.net.SocketException: Connection closed by remote host
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1878)
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1865)
at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:973)
at javax.mail.Transport.send0(Transport.java:193)
at javax.mail.Transport.send(Transport.java:120)
at enviaremail.Principal.main(Principal.java:40)
Caused by: java.net.SocketException: Connection closed by remote host
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1307)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:110)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1876)
… 5 more
GENERACIÓN CORRECTA (total time: 3 seconds)
El codigo es el siguiente:
package enviaremail;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class Principal {
public static void main(String[] args) {
try {
// Se debe crear un archivo de propiedades que
// contenga el nombre del servidor SMTP
Properties props = new Properties();
props.put(“mail.host”, “smtp.live.com”);
props.setProperty(“mail.smtp.host”, “smtp.live.com”);
props.put(“mail.smtp.port”, “25″);
props.setProperty(“mail.smtp.starttls.enable”, “true”);
props.setProperty(“mail.smtp.user”, “dj_bass_88@hotmail.com”);
props.setProperty(“mail.smtp.pass”, “xxxxxx”);
// se crea un objeto de sesion
Session conexionCorreo = Session.getInstance(props, null);
// este objeto representa el mensaje a enviar
Message mensaje = new MimeMessage(conexionCorreo);
// los objetos Adress contienen informacion de recipientes de correo
Address desde = new InternetAddress(“dj_bass_88@hotmail.com”,”Juanjo Gomez”);
Address para = new InternetAddress(“dj_bass_88@hotmail.com”);
// asignamos el contenido. En este caso usamos ‘text/plain’ pero
// es posible usar ‘text/html’ para enviar correos con contenido
// HTML
mensaje.setContent(“Este es un mensaje de texto plano!”,”text/plain”);
// asignar el origen del correo
mensaje.setFrom(desde);
// asignar un destinatario
mensaje.setRecipient(Message.RecipientType.TO, para);
// asignar el asunto del correo
mensaje.setSubject(“Hola, Java Mail!”);
Transport.send(mensaje);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Buenas, despues de un rato… con este código a mi me funciona perfectamente.
package enviaremail;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Principal {
public static void main(String[] args) {
try {
Properties props = new Properties();
props.setProperty(“mail.smtp.host”, “smtp.live.com”);
props.setProperty(“mail.smtp.starttls.enable”, “true”);
props.setProperty(“mail.smtp.port”, “25″);
props.setProperty(“mail.smtp.user”, “dj_bass_88@hotmail.com”);
props.setProperty(“mail.smtp.auth”, “true”);
System.out.println(“Enviando…”);
// Preparamos la sesion
Session session = Session.getDefaultInstance(props);
// Construimos el mensaje
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(“dj_bass_88@hotmail.com”));
message.addRecipient(
Message.RecipientType.TO,
new InternetAddress(“admin@acrosssound.com”));
message.setSubject(“Prueba”);
message.setText(“Esto es una prueba…”);
// Lo enviamos.
Transport t = session.getTransport(“smtp”);
t.connect(“dj_bass_88@hotmail.com”, “password”);
t.sendMessage(message, message.getAllRecipients());
// Cierre.
t.close();
System.out.println(“\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEmail Enviado!”);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}