Servlets - Envoi d'e-mails

Envoyer un e-mail en utilisant votre servlet est assez simple mais pour commencer, vous devriez avoir JavaMail API et Java Activation Framework (JAF) installé sur votre machine.

  • Vous pouvez télécharger la dernière version de JavaMail (version 1.2) à partir du site Web standard de Java.

  • Vous pouvez télécharger la dernière version de JAF (version 1.1.1) à partir du site Web standard de Java.

Téléchargez et décompressez ces fichiers, dans les répertoires de niveau supérieur nouvellement créés, vous trouverez un certain nombre de fichiers jar pour les deux applications. Vous devez ajoutermail.jar et activation.jar fichiers dans votre CLASSPATH.

Envoyer un e-mail simple

Voici un exemple pour envoyer un simple e-mail depuis votre machine. Ici, on suppose que votrelocalhostest connecté à Internet et suffisamment capable d'envoyer un e-mail. En même temps, assurez-vous que tous les fichiers jar du package Java Email API et du package JAF sont disponibles dans 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();
      }
   }
}

Maintenant, compilons le servlet ci-dessus et créons les entrées suivantes dans 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>
....

Maintenant, appelez ce servlet en utilisant l'URL http: // localhost: 8080 / SendEmail qui enverrait un e-mail à l'ID de messagerie donné [email protected] et afficherait la réponse suivante -

Send Email

Sent message successfully....

Si vous souhaitez envoyer un e-mail à plusieurs destinataires, les méthodes suivantes seront utilisées pour spécifier plusieurs ID d'e-mail -

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

Voici la description des paramètres -

  • type- Ce serait réglé sur TO, CC ou BCC. Ici, CC représente Carbon Copy et BCC représente Black Carbon Copy. Exemple de Message.RecipientType.TO

  • addresses- Ceci est le tableau d'ID de messagerie. Vous devrez utiliser la méthode InternetAddress () lors de la spécification des identifiants de messagerie.

Envoyer un e-mail HTML

Voici un exemple pour envoyer un e-mail HTML depuis votre machine. Ici, on suppose que votrelocalhostest connecté à Internet et suffisamment capable d'envoyer un e-mail. En même temps, assurez-vous que tous les fichiers jar du package Java Email API et du package JAF sont disponibles dans CLASSPATH.

Cet exemple est très similaire au précédent, sauf que nous utilisons ici la méthode setContent () pour définir le contenu dont le deuxième argument est "text / html" pour spécifier que le contenu HTML est inclus dans le message.

En utilisant cet exemple, vous pouvez envoyer un contenu HTML aussi volumineux que vous le souhaitez.

// 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();
      }
   }
}

Compilez et exécutez le servlet ci-dessus pour envoyer un message HTML sur un ID de messagerie donné.

Envoyer la pièce jointe par e-mail

Voici un exemple pour envoyer un e-mail avec pièce jointe depuis votre machine. Ici, on suppose que votrelocalhost est connecté à Internet et suffisamment capable d'envoyer un e-mail.

// 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();
      }
   }
}

Compilez et exécutez le servlet ci-dessus pour envoyer un fichier en pièce jointe avec un message sur un identifiant de messagerie donné.

Partie d'authentification utilisateur

S'il est nécessaire de fournir un ID utilisateur et un mot de passe au serveur de messagerie à des fins d'authentification, vous pouvez définir ces propriétés comme suit:

props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");

Le reste du mécanisme d'envoi de courrier électronique resterait tel qu'expliqué ci-dessus.