Gửi Email trong JSP

Để gửi một Email bởi sử dụng một JSP là khá đơn giản. Nhưng trước hết bạn cần cài đặt JavaMail API và Java Activation Framework (JAF) trên thiết bị.

  • Bạn có thể tải phiên bản mới nhất của JavaMail (Version 1.2) từ Website chuẩn của Java..
  • Bạn có thể tải phiên bản mới nhất của JavaBeans Activation Framework JAF (Version 1.0.2) từ Website chuẩn của Java.

Tải và unzip các file này, trong các thư mục cấp độ cao nhất. Bạn cần thêm các file là mail.jaractivation.java vào trong CLASSPATH của bạn.

Gửi một Email đơn giản trong JSP

Ví dụ sau minh họa cách gửi một Email đơn giản từ thiết bị của bạn. Tại đây giả sử rằng localhost của bạn đã kết nối internet và có khả năng để gửi một Email. Ngoài ra, đảm bảo rằng, tất cả các jar file từ Java Email API package và JAF package là có sẵn trong 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 = "abcd@gmail.com";


   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";


   // 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>

Bây giờ, đặt code trên trong SendEmail.jsp file và gọi JSP này bởi sử dụng địa chỉ URL là http://localhost:8080/SendEmail.jsp, mà sẽ gửi một Email tới Email ID đã cho là abcd@gmail.com và sẽ hiển thị phản hồi sau:

Send Email using JSP

Result: Sent message successfully....

Nếu bạn muốn gửi một Email tới nhiều người nhận, thì phương thức sau sẽ được sử dụng để xác định nhiều Email ID:

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

Miêu tả các tham số:

  • type: Nó sẽ được thiết lập là TO, CC hoặc BCC. Với CC biểu diễn Carbon Copy và BCC biểu diễn Black Carbon Copy. Ví dụ: Message.RecipientType.TO
  • addresses: Đây là mảng các Email ID. Bạn sẽ cần sử dụng phương thức InternetAddress() trong khi xác định các Email ID đó.

Gửi một HTML Email trong JSP

Sau đây là một ví dụ minh họa cách gửi một HTML Email từ thiết bị của bạn bởi sử dụng Servlet. Tại đây giả sử rằng localhost của bạn đã kết nối internet và có khả năng để gửi một Email. Ngoài ra, đảm bảo rằng, tất cả các jar file từ Java Email API package và JAF package là có sẵn trong CLASSPATH.

Ví dụ này tương tự như ví dụ trước đó, ngoại trừ, chúng ta sử dụng phương thức setContent() để thiết lập nội dung của tham số thứ hai là "text/html" để xác định rằng HTML content đó được bao trong thông báo.

Sử dụng ví dụ này, bạn có thể gửi một HTML email lớn bao nhiêu tùy thích.

<%@ 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 = "abcd@gmail.com";


   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";


   // 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>

Bây giờ, thử sử dụng JSP trên để gửi thông báo HTML trên một Email ID đã cho.

Gửi Email với Attachment trong JSP

Đây là ví dụ để gửi Email cùng với một đính kèm từ thiết bị của bạn trong JSP:

<%@ 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 = "abcd@gmail.com";


   // Sender's email ID needs to be mentioned
   String from = "mcmohd@gmail.com";


   // 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 multipar 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 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>

Thử chạy JSP trên để gửi một file như là một Attachment cùng với một thông báo trên một Email ID đã cho.

Phần User Authentication

Nếu cần thiết để cung cấp User ID và Password tới Email server cho mục đích xác nhận (authentication) thì bạn có thể thiết lập các thuộc tính này như sau:

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

Rest of the email sending mechanism would remain as explained above.

Sử dụng Form để gửi Email trong JSP

Bạn có thể sử dụng HTML form để chấp nhận các tham số của email và sau đó bạn có thể sử dụng đối tượng request để nhận tất cả thông tin đó như sau:

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

Khi bạn có tất cả thông tin trên, bạn có thể sử dụng các chương trình đã đề cập để gửi email.


Bình luận