本文共 3018 字,大约阅读时间需要 10 分钟。
第14章 用servlet发送电子邮件 第14章 用servlet发送电子邮件 在本章中,我们将要了解到如何在servlet(或者其他任何类的Java应用程序)中发送电子邮件。你可能想要在某个用户第一次在你的站点注册的时候给他发送电子邮件,或者你可能想要发送有关正在运行的servlet的运行统计的消息(想象这么一个servlet,它在servlet被调用的时候负责管理用户,你可能需要每天得到一封当天用户的活动统计,以便对你的用户计费)。也许你需要在你的servlet产生异常或者遇到了严重错误的时候得到一个通知。更进一步,你可能想要创建一个自己的在线的电子邮件系统,通过它可以在Internet上阅读和发送电子邮件。需要发送电子邮件的应用真是不胜枚举。 14.1 可能的方案 几乎所有的问题都可以用多种不同的方法解决。在用Java编写的应用程序中发送电子邮件也是如此。 ·你可以打开一个连接到邮件服务器的socket,然后使用低层协议如简单报文传送协议(SMTP,Simple Mail Transport Protocol)来进行通信。你将不得不自己来处理协议中所有的细节。这实在是一件复杂而枯燥的工作。 ·你可以使用在低层协议基础上的某个免费的电子邮件类。这些类的使用抽象了传输的细节。不过有很多这种免费的电子邮件类都只支持电子邮件的发送,而不支持电子邮件的阅读。 ·你还可以用Sun Microsystem的JavaMail API。JavaMail API被设计来给Java应用程序加入电子邮件的能力。 你觉得哪一个方案最好呢?当然,答案还要考虑许多因素,不过,如果你真是想要做许多辛苦的工作并且迫切想要了解传送协议是如何工作,那么你可以选用使用socket连接到邮件服务器的方案。有些人可能会考虑使用一些由别人开发的简单的类来简化这项工作,当然,这样做你会受到这个类所提供的功能的限制,不过这也有可能恰好满足你的需求。如果你想要让你的系统成为Java的电子邮件系统中的卡迪拉克,那么你只能使用JavaMail。JavaMail API非常健壮而且覆盖了你可能需要的电子邮件的全部功能。 比较这三种方案,我们可以得到这样的结论:在传输层协议的层次上编程实在是太烦琐了而且容易出错。为什么要将宝贵的时间浪费在已经有人经历了痛苦才实现了的低层协议细节上呢?正如后面所提到的使用简单的类更为简单且合理。 14.2 使用SmtpClient发送电子邮件 Sun在这个版本的JDK中已经提供了这样一个简洁类sun.net.smtp.SmtpClient。由于这个类位于“sun”树中(区别于“java”树),所以它被认为是不被支持的。对于那些要求必须使用官方发布的而且有支持的软件的企业,显然不能使用这个方案。另外,一定要记住,将Java虚拟机从一个平台移植到另外一个平台的开发商,无须移植那些“sun”树中的类。这意味着大部分JVM提供了SmtpClient类,但是不是所有的JVM都支持它。 SmtpClient类实现了简单报文传送协议(SMTP)。要发送一个电子邮件,我们可以实例化一个新的SmtpClient对象,调用to()方法来指定收件人,调用from()方法来定义发件人,然后调用startMessage()方法返回一个输出流,我们可以向这个流中写入消息首部和正文,最后关闭这个SmtpClient,让SmtpClient自己来发送这个消息。 图14.1显示了SendMailServlet的源程序。这个servlet创建一个HTML表单来取得发件人、主题和消息正文。一旦这个表单被提交,servlet使用SmtpClient类发送这个消息。 package javaservlets.mail; import javax.servlet.*; import javax.servlet.http.*; import sun.net.smtp.*; /** * This servlet will format an email form in HTML and, when * the user submits the form, will mail the message using * SMTP */ public class SendMailServlet extends HttpServlet { public static String MAIL_FROM = "from"; public static String MAIL_SUBJECT = "subject"; public static String MAIL_BODY = "body"; // Multiple 'to' addresses can be separated by commas public static String MAIL_TO = "karl@servletguru.com"; public static String MAIL_HOST = "server1.electronaut.com"; /** * Performs the HTTP GET operation * * @param req The request from the client * @param resp The response from the servlet */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException { // Set the content type of the response resp.setContentType("text/html"); // Get the PrintWriter to write the response java.io.PrintWriter out = resp.getWriter(); // Create the HTML form out.println(""); out.println(""); out.println("Send Email"); out.println(" Send Email to Karl Moss"); out.println(" req.getRequestURI() + "">"); out.println(" "); out.println(""); out.println(""); out.println(" "); // Wrap up out.println(" | |
转载于:http://blog.itpub.net/374079/viewspace-130441/