JSP envoyer un e-mail


Bien qu'il soit très simple d'utiliser JSP pour envoyer des e-mails, cela nécessite l'API JavaMail et JavaBean Activation Framework.

  • Téléchargez la dernière version de JavaMail ici.

  • Téléchargez la dernière version de JavaBeans Activation Framework (JAF) ici.

Téléchargez et décompressez ces fichiers Dans le répertoire racine, vous verrez une série de packages jar. Ajoutez le package mail.jar et le package activation.jar à la variable CLASSPATH.

Envoyer un email simple

Cet exemple montre comment envoyer un email simple depuis votre machine. Cela suppose que localhost est connecté au réseau et capable d'envoyer un e-mail. Dans le même temps, veuillez confirmer à nouveau que le package mail.jar et le package activation.jar ont été ajoutés à la variable 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;
   // 收件人的电子邮件
   String to = "abcd@gmail.com";

   // 发件人的电子邮件
   String from = "mcmohd@gmail.com";

   // 假设你是从本地主机发送电子邮件
   String host = "localhost";

   // 获取系统属性对象
   Properties properties = System.getProperties();

   // 设置邮件服务器
   properties.setProperty("mail.smtp.host", host);

   // 获取默认的Session对象。
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // 创建一个默认的MimeMessage对象。
      MimeMessage message = new MimeMessage(mailSession);
      // 设置 From: 头部的header字段
      message.setFrom(new InternetAddress(from));
      // 设置 To: 头部的header字段
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));
      // 设置 Subject: header字段
      message.setSubject("This is the Subject Line!");
      // 现在设置的实际消息
      message.setText("This is actual 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>

Visitez maintenant http://localhost:8080/SendEmail.jsp, il enverra un e-mail à abcd@gmail.com et affichera les résultats suivants :

Send Email using JSP
Result: Sent message successfully....

Si vous souhaitez envoyer un e-mail à plusieurs personnes, les méthodes répertoriées ci-dessous peuvent être utilisées pour spécifier plusieurs adresses e-mail :

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

La description du paramètre est la suivante :

  • type : Cette valeur sera définie sur TO, CC ou BCC. CC signifie copie, BCC signifie copie noire et TO est utilisé dans l'exemple de programme.

  • adresses : il s'agit d'un tableau d'adresses e-mail Lorsque vous spécifiez une adresse e-mail, vous devez utiliser la méthode InternetAddress().


Envoyer un e-mail HTML

Cet exemple envoie un simple e-mail HTML. Cela suppose que votre hôte local est connecté au réseau et a la capacité d'envoyer du courrier. Dans le même temps, veuillez confirmer à nouveau que le package mail.jar et le package activation.jar ont été ajoutés à la variable CLASSPATH.

Cet exemple est très similaire à l'exemple précédent, mais dans cet exemple, nous utilisons la méthode setContent() et passons "text/html" comme deuxième paramètre pour indiquer que le message contient du contenu HTML.

<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;
   // 收件人的电子邮件
   String to = "abcd@gmail.com";

   // 发件人的电子邮件
   String from = "mcmohd@gmail.com";

   // 假设你是从本地主机发送电子邮件
   String host = "localhost";

   // 获取系统属性对象
   Properties properties = System.getProperties();

   // 设置邮件服务器
   properties.setProperty("mail.smtp.host", host);

   // 获取默认的Session对象。
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // 创建一个默认的MimeMessage对象。
      MimeMessage message = new MimeMessage(mailSession);
      // 设置 From: 头部的header字段
      message.setFrom(new InternetAddress(from));
      // 设置 To: 头部的header字段
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));
      // 设置 Subject: header字段
      message.setSubject("This is the Subject Line!");
     
      // 设置 HTML消息
      message.setContent("<h1>This is actual message</h1>",
                            "text/html" );
      // 发送消息
      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>

Vous pouvez maintenant essayer d'utiliser le fichier JSP ci-dessus pour envoyer un e-mail avec un message HTML.


Inclure des pièces jointes dans les e-mails

Cet exemple nous montre comment envoyer un e-mail contenant des pièces jointes.

<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
   String result;
   // 收件人的电子邮件
   String to = "abcd@gmail.com";

   // 发件人的电子邮件
   String from = "mcmohd@gmail.com";

   // 假设你是从本地主机发送电子邮件
   String host = "localhost";

   // 获取系统属性对象
   Properties properties = System.getProperties();

   // 设置邮件服务器
   properties.setProperty("mail.smtp.host", host);

   // 获取默认的Session对象。
   Session mailSession = Session.getDefaultInstance(properties);

   try{
      // 创建一个默认的MimeMessage对象。
      MimeMessage message = new MimeMessage(mailSession);

      // 设置 From: 头部的header字段
      message.setFrom(new InternetAddress(from));

      // 设置 To: 头部的header字段
      message.addRecipient(Message.RecipientType.TO,
                               new InternetAddress(to));

      // 设置 Subject: header字段
      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 = "Send Email";
      result = "Sent message successfully....";
   }catch (MessagingException mex) {
      mex.printStackTrace();
      result = "Error: unable to send message....";
   }
%>
<html>
<head>
<title>Send Attachement Email using JSP</title>
</head>
<body>
<center>
<h1>Send Attachement Email using JSP</h1>
</center>
<p align="center">
<% 
   out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>

Section d'authentification de l'utilisateur

Si le serveur de messagerie nécessite un nom d'utilisateur et un mot de passe pour l'authentification de l'utilisateur, il peut être défini comme suit :

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

Utilisez un formulaire pour envoyer un email

Utilisez un formulaire HTML pour recevoir un email et obtenez toutes les informations de l'e-mail via l'objet de requête :

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

Après avoir obtenu les informations ci-dessus, vous pouvez utiliser l'exemple mentionné plus tôt pour envoyer un e-mail.