Servlet - 发送电子邮件
-
简述
使用您的 Servlet 发送电子邮件很简单,但开始时您应该 JavaMail API 和 Java Activation Framework (JAF) 安装在你的机器上。-
您可以从 Java 的标准网站下载最新版本的JavaMail(版本 1.2)。
-
您可以从 Java 的标准网站下载最新版本的JAF(版本 1.1.1)。
下载并解压缩这些文件,在新创建的顶级目录中,您将找到两个应用程序的许多 jar 文件。你需要添加mail.jar 和 activation.jar CLASSPATH 中的文件。 -
-
发送简单的电子邮件
这是从您的机器发送简单电子邮件的示例。这里假设您的localhost已连接到 Internet 并且足以发送电子邮件。同时确保来自 Java Email API 包和 JAF 包的所有 jar 文件在 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(); } } }
现在让我们编译上面的 servlet 并在 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> ....
现在使用 URL http://localhost:8080/SendEmail 调用这个 servlet,它将发送一封电子邮件到给定的电子邮件 ID abcd@gmail.com并显示以下响应 -Sent message successfully....
如果您想向多个收件人发送电子邮件,则将使用以下方法指定多个电子邮件 ID -void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
这是参数的描述 --
type- 这将设置为 TO、CC 或 BCC。这里CC代表Carbon Copy,BCC代表Black Carbon Copy。示例Message.RecipientType.TO
-
addresses- 这是电子邮件 ID 的数组。您需要在指定电子邮件 ID 时使用 InternetAddress() 方法。
-
-
发送 HTML 电子邮件
这是从您的机器发送 HTML 电子邮件的示例。这里假设您的localhost已连接到 Internet 并且足以发送电子邮件。同时,确保所有来自Java Email API 包和JAF 包的jar 文件在CLASSPATH 中可用。这个例子与前面的例子非常相似,除了这里我们使用 setContent() 方法来设置第二个参数是“text/html”的内容,以指定 HTML 内容包含在消息中。使用此示例,您可以发送尽可能大的 HTML 内容。// 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(); } } }
编译并运行上述 servlet 以在给定的电子邮件 ID 上发送 HTML 消息。 -
在电子邮件中发送附件
这是从您的机器发送带有附件的电子邮件的示例。这里假设您的localhost 已连接到 Internet 并且足以发送电子邮件。// 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(); } } }
编译并在 servlet 之上运行,以将文件作为附件与给定电子邮件 ID 上的消息一起发送。 -
用户认证部分
如果需要向电子邮件服务器提供用户 ID 和密码以进行身份验证,那么您可以按如下方式设置这些属性 -props.setProperty("mail.user", "myuser"); props.setProperty("mail.password", "mypwd");
其余的电子邮件发送机制将保持如上文所述。