La servlet envoie un e-mail


Envoyer un email à l'aide de Servlet est très simple, mais vous devez d'abord installer l'API JavaMail et le Java Activation Framework)JAF)< sur votre ordinateur 🎜>.

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

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

Téléchargez et décompressez ces fichiers, et dans le répertoire de niveau supérieur nouvellement créé, vous trouverez des fichiers jar pour les deux applications. Vous devez ajouter les fichiers

mail.jar et activation.jar à votre CLASSPATH.

Envoyer un simple e-mail

L'exemple ci-dessous enverra un simple e-mail depuis votre ordinateur. Cela suppose que votre

localhost est connecté à Internet et prend en charge l'envoi d'e-mails. Assurez-vous également que tous les fichiers jar du package Java Email API et du package JAF sont disponibles dans CLASSPATH.

// 文件名 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
      String to = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // 设置 Subject: header field
         message.setSubject("This is the Subject Line!");
         // 现在设置实际消息
         message.setText("This is actual message");
         // 发送消息
         Transport.send(message);
         String title = "发送电子邮件";
         String res = "成功发送消息...";
         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();
      }
   }
}

Compilons maintenant 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>
....

Appelons-le maintenant en visitant l'URL http://localhost:8080/SendEmail Servlets . Cela enverra un e-mail à l'identifiant de messagerie indiqué

abcd@gmail.com et affichera la réponse comme indiqué ci-dessous :

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 identifiants d'e-mail :

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

Voici la description des paramètres :

  • type : Ceci sera défini sur TO, CC ou BCC. Ici, CC signifie copie carbone et BCC signifie copie carbone invisible. Par exemple Message.RecipientType.TO.

  • adresses : Il s'agit d'un tableau d'identifiants de messagerie. Lorsque vous spécifiez un identifiant de messagerie, vous devez utiliser la méthode InternetAddress().

Envoyer un e-mail HTML

L'exemple ci-dessous enverra un e-mail au format HTML depuis votre ordinateur. Cela suppose que votre localhost est connecté à Internet et prend en charge l'envoi d'e-mails. Assurez-vous également 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, mais ici nous utilisons la méthode setContent() pour définir le contenu du deuxième paramètre sur "text/html", qui est utilisé pour spécifier que le contenu HTML est inclus dans le message de.

En utilisant cette instance, vous pouvez envoyer du contenu HTML de n'importe quelle taille.

// 文件名 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
      String to = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // 设置 Subject: header field
         message.setSubject("This is the Subject Line!");

         // 设置实际的 HTML 消息,内容大小不限
         message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
         // 发送消息
         Transport.send(message);
         String title = "发送电子邮件";
         String res = "成功发送消息...";
         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 l'identifiant de messagerie donné.

Envoyer une pièce jointe dans un e-mail

L'exemple ci-dessous enverra un e-mail avec une pièce jointe depuis votre ordinateur. Cela suppose que votre localhost est connecté à Internet et prend en charge l'envoi d'e-mails. Assurez-vous également que tous les fichiers jar du package Java Email API et du package JAF sont disponibles dans CLASSPATH.

// 文件名 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
      String to = "abcd@gmail.com";
 
      // 发件人的电子邮件 ID
      String from = "web@gmail.com";
 
      // 假设您是从本地主机发送电子邮件
      String host = "localhost";
 
      // 获取系统的属性
      Properties properties = System.getProperties();
 
      // 设置邮件服务器
      properties.setProperty("mail.smtp.host", host);
 
      // 获取默认的 Session 对象
      Session session = Session.getDefaultInstance(properties);
      
	  // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

       try{
         // 创建一个默认的 MimeMessage 对象
         MimeMessage message = new MimeMessage(session);
 
         // 设置 From: header field of the header.
         message.setFrom(new InternetAddress(from));
 
         // 设置 To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // 设置 Subject: header field
         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);
         String title = "发送电子邮件";
         String res = "成功发送电子邮件...";
         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 avec une pièce jointe sur l'ID de messagerie donné.

Section d'authentification de l'utilisateur

Si vous devez fournir l'ID utilisateur et le mot de passe au serveur de messagerie pour l'authentification, vous pouvez définir les attributs suivants :

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

Mécanisme d'envoi d'e-mail Le reste reste le même comme expliqué ci-dessus.