Để 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 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 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.jar và activation.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 = "abcd@gmail.com"; // Sender's email ID needs to be mentioned String from = "web@gmail.com"; // 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(); } } }
Biên dịch Servlet trên và tạo các entry 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ờ 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à abcd@gmail.com 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 = "abcd@gmail.com"; // Sender's email ID needs to be mentioned String from = "web@gmail.com"; // 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 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 = "abcd@gmail.com"; // Sender's email ID needs to be mentioned String from = "web@gmail.com"; // 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 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.