简介
在许多网络应用中,发送电子邮件是系统功能必须的一部分。Java Mail API 使得这一处理过程相对直截了当,但是客户的应用程序必须要了解许多配置的详细情况(包括用来发送消息的SMTP主机名字)。
Tomcat 5包括一个产生javax.mail.Session
实例的标准资源工厂,它已经与被server.xml
配置过的SMTP服务器连接好了。通过这种办法,程序完全和电子邮件服务器配置环境中的变化分隔开了——在任何需要的时候,只要请求和接受一个预先配置过的session就行了。
这个过程必需的步骤概括如下:
声明你的资源要求
你要做的第一件事就是修改网络程序部署描述符(/WEB-INF/web.xml
)来声明JNDI名称,你可在其名下查看预先配置过的sessions。根据习惯性,所有这样的名称都必须围绕着邮件
的subcontext而派生(与标准的java:comp/env
naming context 相关,这个naming context是所有的资源工厂的根)。 一个典型的web.xml看起来象这样:
| | |
| <resource-ref>
<description>
Resource reference to a factory for javax.mail.Session
instances that may be used for sending electronic mail
messages, preconfigured to connect to the appropriate
SMTP server.
</description>
<res-ref-name>
mail/Session
</res-ref-name>
<res-type>
javax.mail.Session
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref> | |
| | |
警告——一定要尊重元素的排列顺序,这是网络程序部署描述符DTD所要求的。详细信息请参看Servlet 规范 。
编写使用这个资源的程序
一个典型的使用这个资源索引的例子看起来象这样:
| | |
| Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session) envCtx.lookup("mail/Session");
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(request.getParameter("from"));
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress(request.getParameter("to"));
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject(request.getParameter("subject"));
message.setContent(request.getParameter("content"), "text/plain");
Transport.send(message); | |
| | |
注意,这个程序使用的是与网络程序部署描述符里声明的资源索引相同的名字。这是与在$CATALINA_HOME/conf/server.xml 里配置的资源工厂相映射的,描述如下:
配置Tomcat的资源工厂
要配置Tomcat的资源工厂,把象下面这样的一个元素添加到$CATALINA_HOME/conf/server.xml文件中,并把它套嵌在这个网络应用程序的Context
元素里。
| | |
|
<Context ...>
...
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"
mail.smtp.host="localhost"/>
...
</Context>
| |
| | |
注意,资源的名字(这里是mail/Session
)必须与网络程序部署描述符里指定的值相映射。客户化(自己指定)mail.smtp.host
参数值,让它指向为你的网络(network)提供SMTP服务的服务器那里。
安装JavaMail libraries
Download the JavaMail API. The JavaMail API requires the Java Activation
Framework (JAF) API as well. The Java Activation Framework can be downloaded
from Sun's site.
This download includes 2 vital libraries for the configuration;
activation.jar and mail.jar. Unpackage both distributions and place
them into $CATALINA_HOME/common/lib so that they are available to
Tomcat during the initialization of the mail Session Resource.
Note: placing these jars in both common/lib and a
web application's lib folder will cause an error, so ensure you have
them in the $CATALINA_HOME/common/lib location only.
应用程序示例(Example Application)
这个Tomcat包含的/examples
程序里有一个利用这一资源工厂的例子。你可通过"JSP Examples"链连来访问。实际上发送邮件的这个servlet的源代码是在/WEB-INF/classes/SendMailServlet.java
里面。
警告——默认的配置假设在局部主机
的端口25(port 25)有一个SMTP服务器的列单。如果不是这样,去编辑一下$CATALINA_HOME/conf/server.xml文件,把mail.smtp.host
的参数值修改成你的网络SMTP服务器的主机名字。