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:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("This is the Subject Line!");
message.setText("This is actual message");
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:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("This is the Subject Line!");
message.setContent("<h1>This is actual message</h1>",
"text/html" );
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:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("This is the Subject Line!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("This is message body");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart );
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:
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)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("[email protected]", "Código de autorización de QQ Mail");
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("This is the Subject Line!");
message.setText("This is actual message");
Transport.send(message);
System.out.println("Sent message successfully....from example.com");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Otras extensiones