Gửi Email trong Servlet



Để gửi một Email bởi sử dụng một Servlet là khá đơn giản. Nhưng trước hết bạn cần cài đặt JavaMail APIJava 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 JAF (Version 1.1.1) 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 Servlet

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.

// File Name 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
  {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";
 
      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
	  // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
         // 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);
         String title = "Send Email";
         String res = "Sent message successfully....";
         String docType =
         "\n";
         out.println(docType +
         "\n" +
         "" + title + "\n" +
         "\n" +
         "

" + title + "

\n" + "

" + res + "

\n" + ""); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Biên dịch Servlet trên và tạo các entry sau trong web.xml:

....
 
     SendEmail
     SendEmail
 
 
 
     SendEmail
     /SendEmail
 
....

Bây giờ gọi Servlet trên bởi sử dụng URL là http://localhost:8080/SendEmail sẽ gửi một Email với Email ID đã cho là [email protected] và sẽ hiển thị phản hồi sau:

Send Email

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 Servlet

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.

// File Name 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
  {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";
 
      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
	  // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
         // 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("

This is actual message

", "text/html" ); // Send message Transport.send(message); String title = "Send Email"; String res = "Sent message successfully...."; String docType = "\n"; out.println(docType + "\n" + "" + title + "\n" + "\n" + "

" + title + "

\n" + "

" + res + "

\n" + ""); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Biên dịch và chạy Servlet trên để gửi thông báo HTML trên một Email ID đã cho.

Gửi Email với đính kèm trong Servlet

Ví dụ sau để gửi một Email với Attachment từ thiết bị của bạn bởi sử dụng Servlet. Giả sử localhost của bạn kết nối internet và có khả năng để gửi một Email.

// File Name 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
  {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";
 
      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
	  // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();       try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
 
         // 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";
         String res = "Sent message successfully....";
         String docType =
         "\n";
         out.println(docType +
         "\n" +
         "" + title + "\n" +
         "\n" +
         "

" + title + "

\n" + "

" + res + "

\n" + ""); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Biên dịch và chạy Servlet trên để gửi mọt file như là một đính kèm 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 để gửi Email đó tới Server cho mục đích xác nhận, thì bạn có thể thiết lập các thuộc tính như sau:

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

Phần còn lại của kỹ thuật gửi Email là tương tự như ví dụ trên.

Các bài học SEO phổ biến khác tại VietJack: