JSP menghantar e-mel


Walaupun sangat mudah untuk menggunakan JSP untuk menghantar e-mel, ia memerlukan API JavaMail dan Rangka Kerja Pengaktifan JavaBean.

  • Muat turun versi terkini JavaMail di sini.

  • Muat turun versi terkini JavaBeans Activation Framework (JAF) di sini.

Muat turun dan nyahzip fail ini Dalam direktori akar, anda akan melihat satu siri pakej balang. Tambahkan pakej mail.jar dan pakej activation.jar pada pembolehubah CLASSPATH.

Hantar e-mel ringkas

Contoh ini menunjukkan cara menghantar e-mel ringkas daripada mesin anda. Ia menganggap bahawa localhost disambungkan ke rangkaian dan mempunyai keupayaan untuk menghantar e-mel. Pada masa yang sama, sila sahkan sekali lagi bahawa pakej mail.jar dan pakej activation.jar telah ditambahkan pada pembolehubah 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>

Sekarang lawati http://localhost:8080/SendEmail.jsp, ia akan menghantar e-mel ke abcd@gmail.com dan memaparkan keputusan berikut:

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

Jika anda mahu Untuk menghantar e-mel kepada berbilang orang, kaedah yang disenaraikan di bawah boleh digunakan untuk menentukan berbilang alamat e-mel:

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

Penerangan parameter adalah seperti berikut:

  • jenis: Nilai ini akan ditetapkan kepada TO, CC atau BCC. CC bermaksud salinan, BCC bermaksud salinan hitam, dan TO digunakan dalam program contoh.

  • alamat: Ini ialah susunan alamat e-mel Apabila menentukan alamat e-mel, anda perlu menggunakan kaedah InternetAddress().


Hantar e-mel HTML

Contoh ini menghantar e-mel HTML ringkas. Ia mengandaikan bahawa localhost anda disambungkan ke rangkaian dan mempunyai keupayaan untuk menghantar mel. Pada masa yang sama, sila sahkan sekali lagi bahawa pakej mail.jar dan pakej activation.jar telah ditambahkan pada pembolehubah CLASSPATH.

Contoh ini sangat serupa dengan contoh sebelumnya, tetapi dalam contoh ini kami menggunakan kaedah setContent() dan lulus "text/html" sebagai parameter kedua untuk menunjukkan bahawa mesej mengandungi kandungan 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>

Kini anda boleh cuba menggunakan fail JSP di atas untuk menghantar e-mel dengan mesej HTML.


Termasuk lampiran dalam e-mel

Contoh ini menunjukkan kepada kita cara menghantar e-mel yang mengandungi lampiran.

<%@ 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>

Bahagian pengesahan pengguna

Jika pelayan mel memerlukan nama pengguna dan kata laluan untuk pengesahan pengguna, ia boleh ditetapkan seperti berikut:

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

Gunakan borang untuk menghantar e-mel

Gunakan borang HTML untuk menerima e-mel dan dapatkan semua maklumat e-mel melalui objek permintaan:

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

Selepas mendapatkan maklumat di atas, anda boleh menggunakan contoh disebut tadi untuk menghantar E-mel.