Java Envío de correo electrónico

Enviar correos electrónicos usando una aplicación Java es muy sencillo, pero primero debes instalar JavaMail API y Java Activation Framework (JAF) en tu máquina.

  • Puedes descargar la última versión desde el sitio web de JavaJavaMail, en el lado derecho de la página hay unDownloadsenlace, haz clic en él para descargarlo.
  • Puedes descargar la última versión desde el sitio web de JavaJAF (versión 1.1.1)。

También puedes usar los enlaces de descarga proporcionados por este sitio:

  • JavaMail mail.jar 1.4.5
  • JAF (versión 1.1.1) activation.jar

Descarga y descomprime estos archivos. En el directorio de nivel superior recién creado, encontrarás algunos archivos jar de estas dos aplicaciones. Debes agregarmail.jaryactivation.jarlos archivos a tu CLASSPATH.

Si usas un servidor de correo de terceros, como el servidor SMTP de QQ, puedes consultar el ejemplo completo de autenticación de usuario al final del artículo.


Enviar un correo electrónico simple

A continuación se muestra un ejemplo de envío de un correo electrónico simple. Supón que tu host local ya está conectado a la red.

Código del archivo SendEmail.java:

//Nombre de archivo SendEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String [] args) { //Correo electrónico del destinatario String to = "[email protected]"; //Correo electrónico del remitente String from = "[email protected]"; //Especifica el host de envío de correo como localhost String host = "localhost"; //Obtener las propiedades del sistema Properties properties = System.getProperties(); //Configurar el servidor de correo properties.setProperty("mail.smtp.host", host); //Obtener el objeto Session predeterminado Session session = Session.getDefaultInstance(properties); try{ //Crear el objeto MimeMessage predeterminado MimeMessage message = new MimeMessage(session); //Establecer el campo de encabezado "From:" message.setFrom(new InternetAddress(from)); //Establecer el campo de encabezado "To:" message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Establecer el campo de encabezado "Subject:" message.setSubject("This is the Subject Line!"); //Establecer el cuerpo del mensaje message.setText("This is actual message"); //Enviar el mensaje Transport.send(message); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compila y ejecuta este programa para enviar un correo electrónico simple:

$ java SendEmail
Sent message successfully....

Si deseas enviar un correo electrónico a varios destinatarios, usa el siguiente método para especificar varios IDs de destinatarios:

void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException

A continuación se describe el parámetro:

  • type:Debe establecerse como TO, CC o BCC, donde CC representa copia carbón y BCC representa copia carbón oculta. Ejemplo:Message.RecipientType.TO

  • addresses:Este es un array de IDs de correo electrónico. Al especificar los IDs de correo electrónico, necesitarás usar el método InternetAddress().


Enviar un correo electrónico HTML

A continuación se muestra un ejemplo de envío de un correo electrónico HTML. Supón que tu host local ya está conectado a la red.

Es muy similar al ejemplo anterior, excepto que usamos el método setContent() para establecer el contenido como "text/html" en el segundo parámetro y así especificar que se enviará contenido HTML.

Código del archivo SendHTMLEmail.java:

//Nombre de archivo SendHTMLEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendHTMLEmail { public static void main(String [] args) { //Correo electrónico del destinatario String to = "[email protected]"; //Correo electrónico del remitente String from = "[email protected]"; //Especifica el host de envío de correo como localhost String host = "localhost"; //Obtener las propiedades del sistema Properties properties = System.getProperties(); //Configurar el servidor de correo properties.setProperty("mail.smtp.host", host); //Obtener el objeto Session predeterminado. Session session = Session.getDefaultInstance(properties); try{ //Crear el objeto MimeMessage predeterminado. MimeMessage message = new MimeMessage(session); //Establecer el campo de encabezado "From:" message.setFrom(new InternetAddress(from)); //Establecer el campo de encabezado "To:" message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Establecer el campo de encabezado "Subject:" message.setSubject("This is the Subject Line!"); //Enviar mensaje HTML; se pueden insertar etiquetas html message.setContent("<h1>This is actual message</h1>", "text/html" ); //Enviar el mensaje Transport.send(message); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compila y ejecuta este programa para enviar un correo electrónico HTML:

$ java SendHTMLEmail
Sent message successfully....

Enviar un correo electrónico con adjuntos

A continuación se muestra un ejemplo de envío de un correo electrónico con adjuntos. Supón que tu host local ya está conectado a la red.

Código del archivo SendFileEmail.java:

//Nombre de archivo SendFileEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendFileEmail { public static void main(String [] args) { //Correo electrónico del destinatario String to = "[email protected]"; //Correo electrónico del remitente String from = "[email protected]"; //Especifica el host de envío de correo como localhost String host = "localhost"; //Obtener las propiedades del sistema Properties properties = System.getProperties(); //Configurar el servidor de correo properties.setProperty("mail.smtp.host", host); //Obtener el objeto Session predeterminado. Session session = Session.getDefaultInstance(properties); try{ //Crear el objeto MimeMessage predeterminado. MimeMessage message = new MimeMessage(session); //Establecer el campo de encabezado "From:" message.setFrom(new InternetAddress(from)); //Establecer el campo de encabezado "To:" message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Establecer el campo de encabezado "Subject:" message.setSubject("This is the Subject Line!"); //Crear la parte del mensaje BodyPart messageBodyPart = new MimeBodyPart(); //Mensaje messageBodyPart.setText("This is message body"); //Crear el mensaje multiparte Multipart multipart = new MimeMultipart(); //Establecer la parte de texto del mensaje multipart.addBodyPart(messageBodyPart); //Parte del adjunto messageBodyPart = new MimeBodyPart(); String filename = "file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); //Enviar el mensaje completo message.setContent(multipart ); //Enviar el mensaje Transport.send(message); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compila y ejecuta tu programa para enviar un correo electrónico con adjuntos.

$ java SendFileEmail
Sent message successfully....

Sección de autenticación de usuario

Si necesitas proporcionar nombre de usuario y contraseña al servidor de correo para lograr la autenticación de usuario, puedes hacerlo con la siguiente configuración:

props.put("mail.smtp.auth", "true"); props.setProperty("mail.user", "myuser"); props.setProperty("mail.password", "mypwd");

El resto del mecanismo de envío del correo electrónico es igual al descrito anteriormente.

Ejemplo de envío de correo que requiere verificación de nombre de usuario y contraseña:

Este ejemplo usa el servidor de correo de QQ como referencia. Debes iniciar sesión en el panel de QQ Mail y activar el servicio POP3/SMTP en "Configuración" => Cuenta, como se muestra en la siguiente imagen:

QQ Mail establece la contraseña generando un código de autorización:

El código Java es el siguiente:

Código del archivo SendEmail2.java:

//Ejemplo de envío de correo que requiere nombre de usuario y contraseña //Nombre de archivo SendEmail2.java //Este ejemplo usa QQ Mail como referencia; debes configurarlo en el panel de QQ import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendEmail2 { public static void main(String [] args) { //Correo electrónico del destinatario String to = "[email protected]"; //Correo electrónico del remitente String from = "[email protected]"; //Especifica el host de envío de correo como smtp.qq.com String host = "smtp.qq.com"; //Servidor de correo de QQ //Obtener las propiedades del sistema Properties properties = System.getProperties(); //Configurar el servidor de correo properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.auth", "true"); //Obtener el objeto Session predeterminado Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "Código de autorización de QQ Mail"); //Nombre de usuario de correo del remitente y código de autorización } }); try{ //Crear el objeto MimeMessage predeterminado MimeMessage message = new MimeMessage(session); //Establecer el campo de encabezado "From:" message.setFrom(new InternetAddress(from)); //Establecer el campo de encabezado "To:" message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Establecer el campo de encabezado "Subject:" message.setSubject("This is the Subject Line!"); //Establecer el cuerpo del mensaje message.setText("This is actual message"); //Enviar el mensaje Transport.send(message); System.out.println("Sent message successfully....from example.com"); }catch (MessagingException mex) { mex.printStackTrace(); } } }
Otras extensiones