JSP - Envoi d'e-mails

Dans ce chapitre, nous verrons comment envoyer des e-mails à l'aide de JSP. Pour envoyer un e-mail à l'aide d'un JSP, vous devez disposer duJavaMail API et le 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 JavaBeans Activation Framework JAF (version 1.0.2) à 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 ajouter lemail.jar et le activation.jar fichiers dans votre CLASSPATH.

Envoyer un e-mail simple

Voici un exemple pour envoyer un simple e-mail depuis votre machine. On suppose que votrelocalhostest connecté à Internet et qu'il est suffisamment capable d'envoyer un e-mail. Assurez-vous que tous les fichiers jar du package Java Email API et du package JAF sont disponibles dans CLASSPATH.

<%@ page import = "java.io.*,java.util.*,javax.mail.*"%>
<%@ page import = "javax.mail.internet.*,javax.activation.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>

<%
   String result;
   
   // 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 object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try {
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);
      
      // 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);
      result = "Sent message successfully....";
   } catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>

<html>
   <head>
      <title>Send Email using JSP</title>
   </head>
   
   <body>
      <center>
         <h1>Send Email using JSP</h1>
      </center>
      
      <p align = "center">
         <% 
            out.println("Result: " + result + "\n");
         %>
      </p>
   </body>
</html>

Mettons maintenant le code ci-dessus dans SendEmail.jsp fichier et appelez cette JSP en utilisant l'URL http://localhost:8080/SendEmail.jsp. Cela aidera à envoyer un e-mail à l'ID de messagerie donné[email protected]. Vous recevrez la réponse suivante -

Send Email using JSP

Result: Sent message successfully....

Si vous souhaitez envoyer un e-mail à plusieurs destinataires, utilisez les méthodes suivantes 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 des identifiants 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. On suppose que votrelocalhostest connecté à Internet et qu'il est suffisamment capable d'envoyer un e-mail. Assurez-vous que tous les fichiers jar duJava Email API package et le JAF package sont disponibles dans CLASSPATH.

Cet exemple est très similaire au précédent, sauf qu'ici nous utilisons le setContent() méthode 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 nécessaire.

<%@ page import = "java.io.*,java.util.*,javax.mail.*"%>
<%@ page import = "javax.mail.internet.*,javax.activation.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>

<%
   String result;
   
   // 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 object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try {
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);
      
      // 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);
      result = "Sent message successfully....";
   } catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>

<html>
   <head>
      <title>Send HTML Email using JSP</title>
   </head>

   <body>
      <center>
         <h1>Send Email using JSP</h1>
      </center>
      
      <p align = "center">
         <% 
            out.println("Result: " + result + "\n");
         %>
      </p>
   </body>
</html>

Utilisons maintenant le JSP ci-dessus pour envoyer un message HTML sur un identifiant de messagerie donné.

Envoyer la pièce jointe par e-mail

Voici un exemple pour envoyer un e-mail avec pièce jointe à partir de votre machine -

<%@ page import = "java.io.*,java.util.*,javax.mail.*"%>
<%@ page import = "javax.mail.internet.*,javax.activation.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>

<%
   String result;
   
   // 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 object
   Properties properties = System.getProperties();

   // Setup mail server
   properties.setProperty("mail.smtp.host", host);

   // Get the default Session object.
   Session mailSession = Session.getDefaultInstance(properties);

   try {
      // Create a default MimeMessage object.
      MimeMessage message = new MimeMessage(mailSession);

      // 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 multipart 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";
      result = "Sent message successfully....";
   } catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>

<html>
   <head>
      <title>Send Attachment Email using JSP</title>
   </head>
   
   <body>
      <center>
         <h1>Send Attachment Email using JSP</h1>
      </center>
      
      <p align = "center">
         <%out.println("Result: " + result + "\n");%>
      </p>
   </body>
</html>

Exécutons maintenant le JSP ci-dessus pour envoyer un fichier en tant que 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 restera tel qu'expliqué ci-dessus.

Utilisation de formulaires pour envoyer des e-mails

Vous pouvez utiliser le formulaire HTML pour accepter les paramètres d'e-mail, puis vous pouvez utiliser le request objet pour obtenir toutes les informations comme suit -

String to = request.getParameter("to");
String from = request.getParameter("from");
String subject = request.getParameter("subject");
String messageText = request.getParameter("body");

Une fois que vous avez toutes les informations, vous pouvez utiliser les programmes mentionnés ci-dessus pour envoyer des e-mails.