Servlet menghantar e-mel
Menghantar e-mel menggunakan Servlet adalah sangat mudah, tetapi anda perlu memasang JavaMail API dan Java Activation Framework) JAF)< pada komputer anda 🎜>.
- Anda boleh memuat turun versi terkini JavaMail (versi 1.2) daripada tapak web Java Standards.
- Anda boleh memuat turun versi terkini JAF (versi 1.1.1) daripada tapak web Java Standards.
mail.jar dan activation.jar pada CLASSPATH anda.
localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam CLASSPATH.
// 文件名 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 { // 收件人的电子邮件 ID String to = "abcd@gmail.com"; // 发件人的电子邮件 ID String from = "web@gmail.com"; // 假设您是从本地主机发送电子邮件 String host = "localhost"; // 获取系统的属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); // 获取默认的 Session 对象 Session session = Session.getDefaultInstance(properties); // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); try{ // 创建一个默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: header field of the header. message.setFrom(new InternetAddress(from)); // 设置 To: header field of the header. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: header field message.setSubject("This is the Subject Line!"); // 现在设置实际消息 message.setText("This is actual message"); // 发送消息 Transport.send(message); String title = "发送电子邮件"; String res = "成功发送消息..."; 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(); } } }Sekarang mari kita kumpulkan Servlet di atas dan buat entri berikut dalam fail 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> ....Sekarang panggil ini dengan melawati URL http://localhost:8080/SendEmail Servlets . Ini akan menghantar e-mel ke id e-mel yang diberikan
abcd@gmail.com dan akan memaparkan respons seperti yang ditunjukkan di bawah:
Hantar e-mel h1>Mesej berjaya dihantar... |
Jika anda ingin menghantar e-mel kepada berbilang penerima, gunakan kaedah berikut untuk menentukan berbilang ID e-mel:
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
Berikut ialah perihalan parameter:
taip: Ini akan ditetapkan kepada TO, CC atau BCC. Di sini, CC bermaksud salinan karbon dan BCC bermaksud salinan karbon buta. Contohnya Message.RecipientType.TO.
alamat: Ini ialah susunan ID e-mel. Apabila menentukan ID e-mel, anda perlu menggunakan kaedah InternetAddress().
Hantar e-mel HTML
Contoh di bawah akan menghantar e-mel berformat HTML daripada komputer anda. Ini mengandaikan bahawa localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam CLASSPATH.
Contoh ini sangat serupa dengan yang sebelumnya, tetapi di sini kami menggunakan kaedah setContent() untuk menetapkan kandungan parameter kedua kepada "teks/html", yang digunakan untuk menentukan bahawa kandungan HTML adalah termasuk dalam mesej daripada.
Menggunakan contoh ini, anda boleh menghantar kandungan HTML dalam sebarang saiz.
// 文件名 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 { // 收件人的电子邮件 ID String to = "abcd@gmail.com"; // 发件人的电子邮件 ID String from = "web@gmail.com"; // 假设您是从本地主机发送电子邮件 String host = "localhost"; // 获取系统的属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); // 获取默认的 Session 对象 Session session = Session.getDefaultInstance(properties); // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); try{ // 创建一个默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: header field of the header. message.setFrom(new InternetAddress(from)); // 设置 To: header field of the header. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: header field message.setSubject("This is the Subject Line!"); // 设置实际的 HTML 消息,内容大小不限 message.setContent("<h1>This is actual message</h1>", "text/html" ); // 发送消息 Transport.send(message); String title = "发送电子邮件"; String res = "成功发送消息..."; 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(); } } }
Kompil dan jalankan Servlet di atas untuk menghantar mesej HTML pada ID e-mel yang diberikan.
Hantar lampiran dalam e-mel
Contoh di bawah akan menghantar e-mel dengan lampiran daripada komputer anda. Ini mengandaikan bahawa localhost anda disambungkan ke Internet dan menyokong penghantaran e-mel. Juga pastikan semua fail balang pakej Java Email API dan pakej JAF tersedia dalam CLASSPATH.
// 文件名 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 { // 收件人的电子邮件 ID String to = "abcd@gmail.com"; // 发件人的电子邮件 ID String from = "web@gmail.com"; // 假设您是从本地主机发送电子邮件 String host = "localhost"; // 获取系统的属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); // 获取默认的 Session 对象 Session session = Session.getDefaultInstance(properties); // 设置响应内容类型 response.setContentType("text/html"); PrintWriter out = response.getWriter(); try{ // 创建一个默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: header field of the header. message.setFrom(new InternetAddress(from)); // 设置 To: header field of the header. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: header field 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 = "发送电子邮件"; String res = "成功发送电子邮件..."; 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(); } } }
Kompil dan jalankan Servlet di atas untuk menghantar mesej dengan lampiran fail pada ID e-mel yang diberikan.
Bahagian Pengesahan Pengguna
Jika anda perlu memberikan ID pengguna dan kata laluan kepada pelayan e-mel untuk pengesahan, maka anda boleh menetapkan atribut berikut:
props.setProperty("mail.user", "myuser"); props.setProperty("mail.password", "mypwd");
Mekanisme penghantaran e-mel Selebihnya tetap sama seperti yang dijelaskan di atas.