English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Envoi d'e-mails Servlet

Il est très simple d'envoyer un e-mail en utilisant Servlet, mais avant tout, vous devez installer JavaMail API et Java Activation Framework)JAF).

  • Vous pouvez télécharger la dernière version disponible sur le site Java : JavaMail,puis ouvrir la page右侧有一个 Téléchargements Cliquez sur ce lien pour télécharger.

  • Vous pouvez télécharger la dernière version disponible sur le site Java : JAF (version)} 1.1.1).

Vous pouvez également utiliser les liens de téléchargement fournis sur ce site :

Téléchargez et décompressez ces fichiers, vous trouverez dans le répertoire de niveau supérieur créé des fichiers jar de certaines applications. Vous devez ajouter mail.jar et activation.jar fichier doit être ajouté à votre CLASSPATH.

Envoyer un e-mail simple

L'exemple suivant enverra un e-mail simple à partir de votre ordinateur. Ici, nous supposons que votreHôte localConnecté à Internet et capable d'envoyer des e-mails. Assurez-vous également que tous les fichiers jar du paquet Java Email API et JAF sont disponibles dans le CLASSPATH.

// Nom du fichier 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
  {
      // ID e-mail du destinataire
      String to = "[email protected]";
 
      // ID e-mail de l'expéditeur
      String from = "[email protected]";
 
      // Supposons que vous envoyiez un e-mail depuis l'hôte local
      String host = "localhost";
 
      // Obtenir les propriétés du système
      Properties properties = System.getProperties();
 
      // Configurer le serveur de messagerie
      properties.setProperty("mail.smtp.host", host);
 
      // Obtenir l'objet Session par défaut
      Session session = Session.getDefaultInstance(properties);
      
      // Définir le type de contenu de la réponse
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Créer un objet MimeMessage par défaut
         MimeMessage message = new MimeMessage(session);
         // Définir le champ d'en-tête From: de l'en-tête.
         message.setFrom(new InternetAddress(from));
         // Définir le champ d'en-tête To: de l'en-tête.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Définir le champ d'en-tête Subject:
         message.setSubject("This is the Subject Line!");
         // Maintenant, définissons le message réel
         message.setText("This is actual message");
         // Envoyer un message
         Transport.send(message);
         String title = "Envoi d'e-mail";
         String res = "Message envoyé avec succès...";
         String docType = "<!DOCTYPE html> \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 l'entrée suivante dans le fichier 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, accédez à l'URL http://localhost:8080/Appelé cette Servlet via SendEmail. Cela enverra un e-mail à l'ID e-mail donné [email protected]et affichera la réponse suivante :

Envoyer un e-mail

Message envoyé avec succès...

Si vous souhaitez envoyer un e-mail à plusieurs destinataires, utilisez la méthode suivante pour spécifier plusieurs ID d'e-mail :

void addRecipients(Message.RecipientType type, 
                   Address[] addresses)
lève MessagingException

Voici une description des paramètres :

  • type :Cela sera réglé sur TO, CC ou BCC. Ici, CC signifie copie à, et BCC signifie copie cachée. Par exemple Message.RecipientType.TO.

  • addresses :C'est un tableau d'ID d'e-mail. Lorsque vous spécifiez un ID d'e-mail, vous devez utiliser la méthode InternetAddress().

Envoyer un e-mail HTML

L'exemple suivant enverra un e-mail au format HTML à partir de votre ordinateur. Ici, nous supposons que votreHôte localConnecté à Internet et capable d'envoyer des e-mails. Assurez-vous également que tous les fichiers jar du paquet Java Email API et JAF sont disponibles dans le CLASSPATH.

Ce exemple est très similaire au précédent, mais ici nous utilisons la méthode setContent() pour définir le deuxième paramètre sur "text/Le contenu de "html" est utilisé pour spécifier que le contenu HTML est inclus dans le message.

Avec cet exemple, vous pouvez envoyer du contenu HTML de toute taille.

// Nom du fichier 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
  {
      // ID e-mail du destinataire
      String to = "[email protected]";
 
      // ID e-mail de l'expéditeur
      String from = "[email protected]";
 
      // Supposons que vous envoyiez un e-mail depuis l'hôte local
      String host = "localhost";
 
      // Obtenir les propriétés du système
      Properties properties = System.getProperties();
 
      // Configurer le serveur de messagerie
      properties.setProperty("mail.smtp.host", host);
 
      // Obtenir l'objet Session par défaut
      Session session = Session.getDefaultInstance(properties);
      
      // Définir le type de contenu de la réponse
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Créer un objet MimeMessage par défaut
         MimeMessage message = new MimeMessage(session);
         // Définir le champ d'en-tête From: de l'en-tête.
         message.setFrom(new InternetAddress(from));
         // Définir le champ d'en-tête To: de l'en-tête.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Définir le champ d'en-tête Subject:
         message.setSubject("This is the Subject Line!");
         // Définir le message HTML réel, la taille du contenu n'est pas limitée
         message.setContent("<h1>This is actual message</h1>
                            "text/html" );
         // Envoyer un message
         Transport.send(message);
         String title = "Envoi d'e-mail";
         String res = "Message envoyé avec succès...";
         String docType = "<!DOCTYPE html> \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();
      }
   }
}

Compiler et exécuter le Servlet ci-dessus pour envoyer un message HTML à l'ID e-mail donné.

Envoyer une pièce jointe dans un e-mail

L'exemple suivant enverra un e-mail avec pièce jointe à partir de votre ordinateur. Supposons que vous ayezHôte localConnecté à Internet et capable d'envoyer des e-mails. Assurez-vous également que tous les fichiers jar du paquet Java Email API et JAF sont disponibles dans le CLASSPATH.

// Nom du fichier 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
  {
      // ID e-mail du destinataire
      String to = "[email protected]";
 
      // ID e-mail de l'expéditeur
      String from = "[email protected]";
 
      // Supposons que vous envoyiez un e-mail depuis l'hôte local
      String host = "localhost";
 
      // Obtenir les propriétés du système
      Properties properties = System.getProperties();
 
      // Configurer le serveur de messagerie
      properties.setProperty("mail.smtp.host", host);
 
      // Obtenir l'objet Session par défaut
      Session session = Session.getDefaultInstance(properties);
      
      // Définir le type de contenu de la réponse
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
       try{
         // Créer un objet MimeMessage par défaut
         MimeMessage message = new MimeMessage(session);
 
         // Définir le champ d'en-tête From: de l'en-tête.
         message.setFrom(new InternetAddress(from));
 
         // Définir le champ d'en-tête To: de l'en-tête.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Définir le champ d'en-tête Subject:
         message.setSubject("This is the Subject Line!");
 
         // Créer une partie de message 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Remplir le message
         messageBodyPart.setText("This is message body");
         
         // Créer un message multipart
         Multipart multipart = new MimeMultipart();
 
         // Définir la partie de message texte
         multipart.addBodyPart(messageBodyPart);
 
         // La deuxième partie est un fichier joint
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // Envoyer la partie complète du message
         message.setContent(multipart );
 
         // Envoyer un message
         Transport.send(message);
         String title = "Envoi d'e-mail";
         String res = "E-mail envoyé avec succès...";
         String docType = "<!DOCTYPE html> \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 avec une pièce jointe par e-mail à l'ID e-mail donné.

Partie d'authentification de l'utilisateur

Si vous devez fournir un ID utilisateur et un mot de passe pour l'authentification au serveur de messagerie, vous pouvez définir les propriétés suivantes :

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

Le reste du mécanisme d'envoi d'e-mails est le même que celui décrit précédemment.