Servlets - Gửi Email

Để gửi email bằng Servlet của bạn rất đơn giản nhưng để bắt đầu, bạn nên có JavaMail APIJava Activation Framework (JAF) được cài đặt trên máy của bạn.

  • Bạn có thể tải xuống phiên bản mới nhất của JavaMail (Phiên bản 1.2) từ trang web chuẩn của Java.

  • Bạn có thể tải xuống phiên bản mới nhất của JAF (Phiên bản 1.1.1) từ trang web chuẩn của Java.

Tải xuống và giải nén các tệp này, trong thư mục cấp cao nhất mới được tạo, bạn sẽ tìm thấy một số tệp jar cho cả hai ứng dụng. Bạn cần phải thêmmail.jaractivation.jar các tệp trong CLASSPATH của bạn.

Gửi một email đơn giản

Đây là một ví dụ để gửi một email đơn giản từ máy của bạn. Ở đây nó được giả định rằnglocalhostđược kết nối với internet và đủ khả năng để gửi email. Đồng thời đảm bảo rằng tất cả các tệp jar từ gói API Email Java và gói JAF đều 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 =
            "<!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();
      }
   }
}

Bây giờ chúng ta hãy biên dịch servlet ở trên và tạo các mục sau trong 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>
....

Bây giờ, hãy gọi servlet này bằng URL http: // localhost: 8080 / SendEmail, URL này sẽ gửi một email đến ID email [email protected] đã cho và sẽ hiển thị phản hồi sau:

Send Email

Sent message successfully....

Nếu bạn muốn gửi email cho nhiều người nhận thì các phương pháp sau sẽ được sử dụng để chỉ định nhiều ID email:

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

Đây là mô tả của các tham số -

  • type- Điều này sẽ được đặt thành TO, CC hoặc BCC. Ở đây CC đại diện cho Bản sao carbon và BCC đại diện cho Bản sao carbon đen. Ví dụ Message.RecipientType.TO

  • addresses- Đây là mảng ID email. Bạn sẽ cần sử dụng phương thức InternetAddress () khi chỉ định các ID email.

Gửi Email HTML

Đây là một ví dụ để gửi một email HTML từ máy của bạn. Ở đây nó được giả định rằnglocalhostđược kết nối với internet và đủ khả năng để gửi email. Đồng thời, đảm bảo rằng tất cả các tệp jar từ gói Java Email API và gói JAF đều có sẵn trong CLASSPATH.

Ví dụ này rất giống với ví dụ trước, ngoại trừ ở đây chúng tôi đang sử dụng phương thức setContent () để đặt nội dung có đối số thứ hai là "text / html" để chỉ định rằng nội dung HTML được bao gồm trong thư.

Sử dụng ví dụ này, bạn có thể gửi nội dung HTML lớn như bạn 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("<h1>This is actual message</h1>", "text/html" );
         
         // Send message
         Transport.send(message);
         String title = "Send Email";
         String res = "Sent message successfully....";
         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();
      }
   }
}

Biên dịch và chạy servlet trên để gửi tin nhắn HTML trên một ID email nhất định.

Gửi tệp đính kèm trong email

Đây là một ví dụ để gửi một email có tệp đính kèm từ máy của bạn. Ở đây nó được giả định rằnglocalhost được kết nối với internet và đủ khả năng để gửi 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 =
         "<!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();
      }
   }
}

Biên dịch và chạy bên trên servlet để gửi một tệp dưới dạng tệp đính kèm cùng với thông báo trên một ID email nhất định.

Phần xác thực người dùng

Nếu bắt buộc phải cung cấp ID người dùng và Mật khẩu cho máy chủ email để xác thực thì bạn có thể đặt các thuộc tính này như sau:

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

Phần còn lại của cơ chế gửi email sẽ vẫn như được giải thích ở trên.