现在的位置: 首页 > 综合 > 正文

JSP与Java Mail API

2018年01月28日 ⁄ 综合 ⁄ 共 8225字 ⁄ 字号 评论关闭

综述:Java Mail API的开发是SUN为Java开发者提供公用API框架的持续努力的良好例证。提倡公用框架,反对受限于供应商的解决方案,充分预示着一个日益开放的开发环境的建立。
  Java Mail API的结构本身证明了它的开发者的基本目标之一--软件开发的工作量应该取决于应用程序本身的复杂程度以及开发者所要求的控制程度。换句话说,Java Mail API尽可能地保持简单。乍看起来,Java Mail API所拥有的类总数以及类之间的关系可能让人误解为要花费漫长的学习时间。实际上,一旦正式开始使用,你就会发现该API不失为在应用程序中加入健壮的邮件/通讯支持的简单工具。

  建立JavaMail使用环境,需要哪些软件

  首先,需要安装JavaMail API。现在有两种常用的 JavaMail API 版本:1.2 和 1.1.3。虽然版本 1.2 是最新版,但版本 1.1.3 包含了Java 2 平台企业版(Java 2 Platform, Enterprise Edition,J2EE)的版本 1.2.1,所以仍然有很多人使用它。
  ·JavaMail 1.2 的安装
  要使用 JavaMail 1.2 API,请下载 JavaMail 1.2 实现,解开Javamail-1_2.zip 文件,并将 mail.jar 文件添加到 CLASSPATH 中。除了核心类,随版本 1.2 实现一起提供的还有 SMTP、IMAP4 和 POP3 供应商。
  · JavaMail 1.1.3 的安装
  要使用 JavaMail 1.1.3 API,请下载 JavaMail 1.1.3 实现,解开Javamail1_1_3.zip文件,并将 mail.jar 文件添加到您的 CLASSPATH 中。除了核心类,随版本 1.1.3 实现一起提供的还有 SMTP 和 IMAP4 供应商。
  如果您用 JavaMail 1.1.3 访问一个 POP 服务器,请下载并安装一个 POP3 供应商。Sun 就有一个独立于 JavaMail 实现。下载并解开 pop31_1_1.zip 文件后,将 pop3.jar 也添加到您的 CLASSPATH 中。
  其次是JavaBeans Activation Framework 的安装。JavaMail API 的所有版本都需要 JavaBeans Activation Framework 来支持任意数据块的输入及相应处理。功能似乎不多,但目前许多浏览器和邮件工具中都能找到这种基本的 MIME 型支持。下载完框架后,解开 jaf1_0_1.zip 文件,并将 activation.jar 文件添加到 CLASSPATH 中。
  对于 JavaMail 1.2 用户来说,现在您应该已将 mail.jar 和 activation.jar 文件添加到 CLASSPATH 中了。
  而对于 JavaMail 1.1.3 用户,现在您应该已将 mail.jar、pop3.jar和 activation.jar文件添加到 CLASSPATH 中了。如果不打算用 POP3,就不必将 pop3.jar 添加到 CLASSPATH 中去。
  如果您不想更改 CLASSPATH 环境变量,将 jar 文件复制到您 Java 运行时环境(Java Runtime Environment,JRE)目录下的 lib/ext 目录中去。例如,J2SE 1.3 发行版的缺省目录在 Windows 平台的 C:/jdk1.3/jre/lib/ext。

  Java Mail API有哪些核心类

  ·Javax.mail.Session:Session 类定义了一个基本邮件会话(session),是Java Mail API最高层入口类。所有其它类都是经由这个session 才得以生效。Session 对象用 Java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。
  ·Javax.mail.Message:一旦获得 Session 对象,就可以继续创建要发送的消息。这由 Message 类来完成。因为 Message 是个抽象类,必需用一个子类,多数情况下为 Javax.mail.internet.MimeMessage。MimeMessage 是个能理解 MIME 类型和头的电子邮件消息,正如不同 RFC 中所定义的。虽然在某些头部域非 ASCII 字符也能被译码,但 Message 头只能被限制为用 US-ASCII 字符。
  ·Javax.mail.Address:一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用 Address 确定信件地址了。和 Message 一样,Address 也是个抽象类。您用的是 Javax.mail.internet.InternetAddress 类。
  ·Javax.mail. Authenticator:与 Java.net 类一样,JavaMail API 也可以利用 Authenticator 通过用户名和密码访问受保护的资源。对于JavaMail API 来说,这些资源就是邮件服务器。JavaMail Authenticator 在 Javax.mail 包中,而且它和 Java.net 中同名的类 Authenticator 不同。两者并不共享同一个 Authenticator,因为JavaMail API 用于 Java 1.1,它没有 Java.net 类别。
要使用 Authenticator,先创建一个抽象类的子类,并从 getPasswordAuthentication() 方法中返回 PasswordAuthentication 实例。创建完成后,您必需向 session 注册 Authenticator。然后,在需要认证的时候,就会通知 Authenticator。您可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,将它们作为 PasswordAuthentication 对象返回给调用程序。
  ·Javax.mail.Transport:消息发送的最后一部分是使用 Transport 类。这个类用协议指定的语言发送消息(通常是 SMTP)。它是抽象类,它的工作方式与 Session 有些类似。仅调用静态 send() 方法,就能使用类的 缺省版本:Transport.send(message);或者,读者也可以从针对自己的协议的会话中获得一个特定的实例,传递用户名和密码(如果不必要就不传),发送消息,然后关闭连接。
  ·Javax.mail.Store:Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。
  ·Javax.mail.Folder:Folder类用于分级组织邮件,并提供照Javax.mail.Message格式访问email的能力。

  怎样使用JavaScript/" target="_blank">JSP发送email?

  下面我们通过一个简单的例子,来说明在JavaScript/" target="_blank">JSP中邮件是如何发送的。该例由两个文件组成。一个是HTML文件,用来建立邮件信息(包括发送人、接收人、主题等)的表单,并将表单内容发送给JavaScript/" target="_blank">JSP文件;另外一个是JavaScript/" target="_blank">JSP页面,负责邮件的发送。

HTML文件
<HTML>
<BODY>
<FORM action="sendmail.jsp" method="post">
<TABLE align="center">
<TR>
<TD width="50%">
To:<BR><INPUT name="to" size="25">
</TD>
<TD width="50%">
From:<BR><INPUT name="from" size="25">
</TD>
</TR>
<TR>
<TD colspan="2">
Subject:<BR><INPUT name="subject" size="50">
</TD>
</TR>
<TR>
<TD colspan="2">
<P>Message:<BR>
<TEXTAREA name="text" rows=25 cols=85></TEXTAREA>
</P>
</TD>
</TR>
</TABLE>
<INPUT type="submit" name="cb_submit" value=" Send ">
<INPUT type="reset" name="cb_reset" value=" Clear ">
</FORM>
</BODY>
</HTML>


  JavaScript/" target="_blank">JSP页面的作用就是获得表单提交过来的数据,并将这些数据赋给Java Mail API中相应的对象,最后完成邮件发送。

sendmail.jsp文件
<%@ page import=" Javax.mail.*, Javax.mail.internet.*, Javax.activation.*,Java.util.*"%>
<html>
<head>
<TITLE>JavaScript/" target="_blank">JSP meets JavaMail, what a sweet combo.</TITLE>
</head>
<body>
<%
try{
Properties props = new Properties();
Session sendMailSession;
Store store;
Transport transport;

sendMailSession = Session.getInstance(props, null);
props.put("mail.smtp.host", "smtp.jspinsider.com");
Message newMessage = new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress ( request.getParameter ("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(new Date());
newMessage.setText(request.getParameter("text"));
transport = sendMailSession.getTransport("smtp");
transport.send(newMessage);
%>
<P>Your mail has been sent.</P>
<%
}catch(MessagingException m)
{
out.println(m.toString());
}
%>
</body>
</html>

  如何发送HTML类型的邮件

  在上面的例子中,我们实现了如何发送文本格式的邮件,那么HTML格式的邮件该如何发送呢?那就看看下面的例子吧。
  该例由四个文件组成:
  ·form.htm:用来建立邮件信息的表单
  ·send.jsp:用来获取表单提交的信息,并调用mymail.mail.HTML.send()方法发送邮件
  ·StringDataSource.Java:用户自定义的JavaBean,用来将邮件的Body部分转化为HTML格式
  ·HTML.Java:用户自定义的JavaBean,用来发送HTML格式的邮件。在send.jsp文件中提到的mymail.mail.HTML.send()方法就在该JavaBean中定义。

form.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title> JavaMail - 发送HTML邮件</title>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0">
<form method="post" action="send.jsp">
<tr>
<td>SMTP主机:</td>
<td><input type="text" name="smtp" size="80"></td>
</tr>
<tr>
<td>发信人:</td>
<td><input type="text" name="from" size="80"></td>
</tr>
<tr>
<td>收信人:</td>
<td><input type="text" name="to" size="80"></td>
</tr>
<tr>
<td>抄送人:</td>
<td><input type="text" name="cc" size="80"></td>
</tr>
<tr>
<td>暗送人:</td>
<td><input type="text" name="bcc" size="80"></td>
</tr>
<tr>
<td>主题:</td>
<td><input type="text" name="subject" size="80"></td>
</tr>
<tr>
<td valign="top">内容:</td>
<td><textarea name="body" rows="5" cols="80"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="发送"></td>
</tr>
</form>
</table>
</body>
</html>

send.jsp
<%
//变量声明
Java.lang.String smtp,from,to,cc,bcc,subject,body;

//获得用户输入数据
smtp = request.getParameter("smtp");
from = request.getParameter("from");
to = request.getParameter("to");
cc = request.getParameter("cc");
bcc = request.getParameter("bcc");
subject = request.getParameter("subject");
if(subject!=null){
subject = new Java.lang.String(subject.getBytes("iso-8859-1"));
}
body = request.getParameter("body");
//发送邮件
mymail.mail.HTML.send(smtp,from,to,cc,bcc,subject,body);
%>

mymail.jaf.StringDataSource.Java
package mymail.jaf;
public class StringDataSource implements Javax.activation.DataSource
{
private Java.lang.String data;
  private Java.lang.String type;

    public StringDataSource(Java.lang.String data,Java.lang.String type){
        this.data = data;
  this.type = type;
  }

    public Java.io.InputStream getInputStream() throws Java.io.IOException{
        return new Java.io.StringBufferInputStream(data);
}

  public Java.io.OutputStream getOutputStream() throws Java.io.IOException{
      throw new Java.io.IOException("it does not support this method now!");
 }

 public Java.lang.String getContentType(){
          return type;
}

  public Java.lang.String getName(){
      return " mymail ";
}
}

mymail.mail.HTML.Java
package mymail.mail;

public final class HTML
{
public static void send(
   Java.lang.String smtp,  
   Java.lang.String from,  
    Java.lang.String to,  
    Java.lang.String cc,  
    Java.lang.String bcc,  
    Java.lang.String subject,
    Java.lang.String body
        ) throws Java.lang.Exception
{
   //变量声明
     Java.util.Properties props;   //系统属性
   Javax.mail.Session mailSession;   //邮件会话对象
     Javax.mail.internet.MimeMessage mimeMsg; //MIME邮件对象

   //设置系统属性
     props = Java.lang.System.getProperties(); //获得系统属性对象
   props.put("mail.smtp.host",smtp); //设置SMTP主机

     //获得邮件会话对象
   mailSession = Javax.mail.Session.getDefaultInstance(props,null);

     //创建MIME邮件对象
   mimeMsg = new Javax.mail.internet.MimeMessage(mailSession);

     //设置发信人
   mimeMsg.setFrom(new Javax.mail.internet.InternetAddress(from));

     //设置收信人
   if(to!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.TO,Javax.mail. internet.InternetAddress.parse(to));
     }

   //设置抄送人
     if(cc!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.CC,Javax.mail. internet.InternetAddress.parse(cc));
     }

//设置暗送人
if(bcc!=null)
{
mimeMsg.setRecipients(Javax.mail.Message.RecipientType.BCC,Javax.mail. internet.InternetAddress.parse(bcc));
     }

   //设置邮件主题
     //mimeMsg.setSubject(subject);
   mimeMsg.setSubject(subject,"gb2312");

     //设置邮件内容,将邮件body部分转化为HTML格式
   mimeMsg.setDataHandler(new Javax.activation.DataHandler(new mymail.jaf. StringDataSource (body,"text/html")));

   //发送邮件
     Javax.mail.Transport.send(mimeMsg);
 }
}

抱歉!评论已关闭.