博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载]Java Servlets编程指南(十八)
阅读量:2449 次
发布时间:2019-05-10

本文共 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("
From:
Subject:
Text:
");
    out.println("");
    out.println("");
    out.println("
");
  
    // Wrap up
    out.println("

转载于:http://blog.itpub.net/374079/viewspace-130441/

你可能感兴趣的文章
wordpress标签分类_在WordPress中更改类别标签
查看>>
mootools_使用MooTools或jQuery的iPhone单击效果
查看>>
shoelace下载_Shoelace.css:基本CSS入门工具包
查看>>
bit.ly 短地址转换_使用PHP创建Bit.ly短URL:API版本3
查看>>
flext_Flext:MooTools自动增长Textrea插件
查看>>
mootools_书评:MooTools 1.2入门指南
查看>>
创建GitHub Pull Request和Issue模板
查看>>
reddit_使用PHP和JSON获取URL的Reddit分数
查看>>
火狐插件 xpi打包_将Firefox扩展程序打包为XPI
查看>>
使用Google Analytics(分析)跟踪AJAX链接点击
查看>>
图像处理库 gd_使用PHP和GD库进行图像处理
查看>>
robots.txt_robots.txt在开发服务器上重新路由
查看>>
css压缩_使用PHP轻松实现CSS压缩
查看>>
印象chrome_Google Chrome的第一印象
查看>>
mootools_使用MooTools进行背景动画
查看>>
mootools_使用MooTools 1.2分配锚点ID
查看>>
使用MySQL DATE_FORMAT()格式化日期字段
查看>>
mootools_使用MooTools的Digg样式动态共享小部件
查看>>
php验证码数字_PHP:验证数值和数字
查看>>
做了磁盘阵列的硬盘如何恢复_从自制软件恢复磁盘空间
查看>>