Servlets: envío de correo electrónico
Enviar un correo electrónico usando su Servlet es bastante simple, pero para empezar debe tener JavaMail API y Java Activation Framework (JAF) instalado en su máquina.
Puede descargar la última versión de JavaMail (Versión 1.2) del sitio web estándar de Java.
Puede descargar la última versión de JAF (Versión 1.1.1) del sitio web estándar de Java.
Descargue y descomprima estos archivos, en los directorios de nivel superior recién creados encontrará una serie de archivos jar para ambas aplicaciones. Necesitas agregarmail.jar y activation.jar archivos en su CLASSPATH.
Envíe un correo electrónico simple
Aquí hay un ejemplo para enviar un correo electrónico simple desde su máquina. Aquí se supone que sulocalhostestá conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico. Al mismo tiempo, asegúrese de que todos los archivos jar del paquete Java Email API y el paquete JAF estén disponibles en CLASSPATH.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Ahora compilemos el servlet anterior y creemos las siguientes entradas en web.xml
....
<servlet>
<servlet-name>SendEmail</servlet-name>
<servlet-class>SendEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SendEmail</servlet-name>
<url-pattern>/SendEmail</url-pattern>
</servlet-mapping>
....
Ahora llame a este servlet usando la URL http: // localhost: 8080 / SendEmail, que enviaría un correo electrónico al ID de correo electrónico dado [email protected] y mostraría la siguiente respuesta:
Send Email
Sent message successfully....
Si desea enviar un correo electrónico a varios destinatarios, se utilizarán los siguientes métodos para especificar varias ID de correo electrónico:
void addRecipients(Message.RecipientType type, Address[] addresses)
throws MessagingException
Aquí está la descripción de los parámetros:
type- Esto se establecería en TO, CC o BCC. Aquí CC representa Carbon Copy y BCC representa Black Carbon Copy. Ejemplo Message.RecipientType.TO
addresses- Esta es la matriz de ID de correo electrónico. Debería utilizar el método InternetAddress () mientras especifica las ID de correo electrónico.
Envíe un correo electrónico HTML
A continuación se muestra un ejemplo para enviar un correo electrónico HTML desde su máquina. Aquí se supone que sulocalhostestá conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico. Al mismo tiempo, asegúrese de que todos los archivos jar del paquete Java Email API y el paquete JAF estén disponibles en CLASSPATH.
Este ejemplo es muy similar al anterior, excepto que aquí estamos usando el método setContent () para configurar el contenido cuyo segundo argumento es "texto / html" para especificar que el contenido HTML está incluido en el mensaje.
Con este ejemplo, puede enviar contenido HTML tan grande como desee.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Send the actual HTML message, as big as you like
message.setContent("<h1>This is actual message</h1>", "text/html" );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compile y ejecute el servlet anterior para enviar un mensaje HTML en una ID de correo electrónico determinada.
Enviar archivo adjunto por correo electrónico
Aquí hay un ejemplo para enviar un correo electrónico con un archivo adjunto desde su máquina. Aquí se supone que sulocalhost está conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText("This is message body");
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compile y ejecute el servlet anterior para enviar un archivo como archivo adjunto junto con un mensaje en una ID de correo electrónico determinada.
Parte de autenticación de usuario
Si es necesario proporcionar el ID de usuario y la contraseña al servidor de correo electrónico con fines de autenticación, puede configurar estas propiedades de la siguiente manera:
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
El resto del mecanismo de envío de correo electrónico permanecería como se explicó anteriormente.