`
44424742
  • 浏览: 232474 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

利用Apache commons-email组件发送邮件

阅读更多
本程序利用Apache commons Email、Apache commons IO、Apache commons FileUpload组件,并使用MyEclipse6.0、JDK6.0、Tomcat6.0调试通过。
commons-email是apache提供的一个开源的API,主要包括SimpleEmail,MultiPartEmail,HtmlEmail,EmailAttachment四个类。
SimpleEmail:发送简单的email,不能添加附件
MultiPartEmail:文本邮件,可以添加多个附件
HtmlEmail:HTML格式邮件,同时具有MultiPartEmail类所有“功能”
EmailAttchment:附件类,可以添加本地资源,也可以指定网络上资源,在发送时自动将网络上资源下载发送
使用Apache commons Email组件发送邮件时,要求有一个可支持Email发送的邮件服务器,并且有合法的帐号及密码,本例中使用163提供的smtp.163.com服务器。具体步骤如下:

1. 在MyEclipse中创建Web项目

在MyEclipse中创建Web项目JavaMail,在WebRoot中创建用于保存上传文件的目录uploads

2. 到http://www.apache.org下载相关的组件

到http://www.apache.org下载相关的组件,下载后解压缩,并找到下面本个JAR文件,复制到Web项目的WEB-INF/lib目录中。
commons-email-1.1.jar
commons-fileupload-1.2.1.jar
commons-io-1.4.jar

3. 创建显示消息的JSP文件message.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>消息提示</title>

</head>

<body>
${requestScope['sendmail.message'] }
</body>
</html>

4 带附件的电子邮件

4.1 创建JSP文件sendMail2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>带附件的电子邮件</title>

</head>

<body>
使用Apache 组件发送带附件的邮件
<hr/>
<form action="<%=request.getContextPath()%>/servlet/SendMailController2" method="post" enctype="multipart/form-data" name="form1">
<table width="600" border="1">
<tr>
<td>发邮件地址:</td>
<td><label>
<input name="from" type="text" id="from" size="50" value="${requestScope.userName}@163.com">
</label></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>收件邮件地址:</td>
<td>
<label>
<input name="to" type="text" id="to" size="50">
</label> </td>
<td>&nbsp;</td>
</tr>
<tr>
<td>邮件主题:</td>
<td><label>
<input name="subject" type="text" id="subject" size="50">
</label></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>邮件内容:</td>
<td><label>
<textarea name="content" id="content" cols="50" rows="8"></textarea>
</label></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>附件:</td>
<td><label>
<input name="file" type="file" id="file" size="43">
</label></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><label>
<input type="submit" name="button" id="button" value="提交">
</label>
<label>
<input type="reset" name="button2" id="button2" value="重置">
</label></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>


4.2 创建用于发送邮件的sevlet,SendMailController2.jsp

/**********************************************************
* 文件名: SendMailController2.java
* Copyright (c) 2008-2009 长春信息技术职业学院
* 文件编号:
* 创 建 人: 孙丰伟 E-mail: sunfengweimail@163.com
* 日 期: 2008-7-26
* 修 改 人:
* 日 期:
* 描 述: 保存SendMailController2类.发送带附件的邮件
* ********************************************************/
package com.sunfengwei.mail.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
/***********************************************************
* 类编号:
* 类名 : SendMailController2
* 作 用 : 接受客户请求,完成邮件发送
* 作 者 : 孙丰伟
* 日 期 : 2008-7-26
* 方 法 : init 初始Servlet中声明的私有成员
* doPost 接收客户端请求,完成邮件发送
* doSave 发送带附件的邮件时,完成邮件上传及接收客户端参数
************************************************************/
public class SendMailController2 extends HttpServlet {
private ServletContext cx;
private String savePath;
private Map<String,String> parameters;

/********************************************************
* 函数名: doPost
* 功能描述: 获取客户端请求,根据客户端请求发送邮件
* 输入参数: request,response
* 返 回 值: 无
* 作 者: 孙丰伟
* 日 期: 2008-7-26
********************************************************/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//
//复杂邮件发送对象
//
MultiPartEmail mail=new MultiPartEmail();
//
//邮件对象编码
//
mail.setCharset("UTF-8");
//
//设置邮件服务器
//
mail.setHostName("smtp.163.com");
//
//邮件身份认证,必须是在邮件服务器上注册的合法身份
//
mail.setAuthentication("sunfengweimail", "password");
File file=this.doSave(request);
try {
//
//收邮件地址
//
mail.addTo(parameters.get("to"));
//
//发邮件地址
//
mail.setFrom(parameters.get("from"));
//
//邮件主题
//
mail.setSubject(parameters.get("subject"));
//
//邮件内容
//
mail.setMsg(parameters.get("content"));
//
//附加邮件附件
//
if(file!=null)
{
EmailAttachment attachment=new EmailAttachment();
//
//设置邮件附件物理路径
//
attachment.setPath(file.getPath());
//
//邮件附件为从服务器加载的邮件,还有另一个值为ONLINE,表示附件来自INTENET网
//
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setName(file.getName());
//
//绑定附件
//
mail.attach(attachment);
}
//
//发送邮件
//
mail.send();
request.setAttribute("sendmail.message", "邮件发送成功!");
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("sendmail.message", "邮件发送失败!");
}
request.getRequestDispatcher("/message.jsp").forward(request,response);
}

/********************************************************
* 函数名: doSave
* 功能描述: 完成文件上传,把客户端提交的参数保存到Map中
* 输入参数: request
* 返 回 值: File
* 作 者: 孙丰伟
* 日 期: 2008-7-26
********************************************************/
private File doSave(HttpServletRequest request)
{
File file=null;
//
//实例化commons Upload组件提供的磁盘文件工厂
//
DiskFileItemFactory factory=new DiskFileItemFactory();
//
//专用于Servlet中上传文件
//
ServletFileUpload upload=new ServletFileUpload(factory);
//
//实例化参数集合parameters,此处使用JDK1.5提供的范型
//
parameters=new HashMap<String,String>();

try{
//
//通过upload对象,获取所有的请求列表
//
List<FileItem> list=upload.parseRequest(request);
//
//使用foreach循环遍历请求列表
//
for(FileItem item:list)
{
//
// 如果是普通字段
//
if(item.isFormField())
{
//
// getFieldName为客户端字段名,getString为值,另外需处理汉字编码
//
parameters.put(item.getFieldName(), item.getString("UTF-8"));
}
//
// 如果是上传的文件,则将文件保存到服务器目录中
//
else
{
if(null!=item.getName()&&(!item.getName().equals("")))
{
File tempFile=new File(item.getName());
file=new File(cx.getRealPath("/")+savePath,tempFile.getName());
item.write(file);
}
}
}
}
catch(Exception ex)
{
request.setAttribute("upload.message", "文件上传失败!");
}

return file;


}
/********************************************************
* 函数名: init
* 功能描述: 初始化Servlet中私有成员值
* 输入参数: 无
* 返 回 值: 无
* 作 者: 孙丰伟
* 日 期: 2008-7-26
********************************************************/
public void init() throws ServletException {
//
// 从web.xml配置文件上读取当前Servlet中参数savePath的值
//
savePath=this.getInitParameter("savePath");
//
// 获取当前上下文
//
cx=this.getServletContext();
}

}

5 web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>SendMailController2</servlet-name>
<servlet-class>com.sunfengwei.mail.controller.SendMailController2</servlet-class>
<init-param>
<param-name>savePath</param-name>
<param-value>/uploads</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SendMailController2</servlet-name>
<url-pattern>/servlet/SendMailController2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

6. 在Tomcat6.0中发布运行
分享到:
评论

相关推荐

    mail.jar、commons-email-1.2.jar 、activation.jar下载

    `mail.jar`包含核心的JavaMail组件,如`javax.mail`包,该包定义了用于邮件操作的基本接口和类,如`Session`(邮件会话)、`Message`(邮件对象)、`Transport`(用于发送邮件)等。 2. **Apache Commons Email**...

    Java Mail和Commons-email发简单的邮件所用到的jar包

    集成这些jar包后,开发者可以按照以下步骤使用JavaMail和Commons Email发送邮件: 1. 添加依赖:将上述jar包放入项目的类路径或构建工具的依赖管理中。 2. 创建Session:配置邮件服务器的相关参数,如主机名、端口...

    commons-email需要的几个包

    在标题和描述中提到的"commons-email需要的几个包",是指为了完全利用和开发基于Apache Commons Email的功能,我们需要获取和理解的几个核心组件。下面将详细介绍这些组件以及它们的作用。 1. **commons-email-1.1-...

    activation.jar commons-email-1.2.jar mail.jar免费下载

    2. **commons-email-1.2.jar**:这是Apache Commons Email库的一个版本,它为Java开发者提供了一个简单易用的API来创建和发送电子邮件。这个库支持HTML邮件、多部分/附件邮件、SSL/TLS连接,以及许多其他高级特性,...

    commons-email-1.1.jar

    首先,`commons-email-1.1.jar`是Apache Commons Email库的核心组件,这个库简化了Java邮件的发送过程。它提供了丰富的功能,如支持HTML邮件、多部分消息(包括附件)、SMTP身份验证以及异常处理。通过使用Apache ...

    commons-email jar

    首先,`commons-email-1.2.jar`是Apache Commons Email项目的主库,它包含了创建和发送电子邮件所需的所有核心类和方法。Apache Commons项目是Apache软件基金会的一部分,致力于提供一系列通用的Java工具和库,以...

    commons-email-1.1.rar源文件及jar文件

    开发者可以通过添加这个jar到项目的类路径(classpath)来利用其功能,例如创建一个`Email`对象,设置收件人、主题和正文,然后调用`send()`方法发送邮件。 3. **commons-email-1.1-src.zip 文件** 这个源代码...

    activation/commons-email/mail.jar

    在Java编程环境中,发送电子...Apache Commons Email库的便捷性结合JavaMail API的强大功能,使得在Java应用程序中发送邮件变得简单高效。在实际项目中,只需合理配置和调用这些库,就能实现可靠且灵活的邮件服务功能。

    commons-email-1.5-src.zip

    Apache Commons Email库是Java开发人员用来简化电子邮件发送过程的一个强大工具。这个库是Apache Commons项目的一部分,它专注于提供一个简单且灵活的API,用于构建和发送复杂的电子邮件。"commons-email-1.5-src....

    commons-email-jar

    `commons-email`是Apache Commons组件之一,它的目标是为Java开发者提供一个易于使用的邮件API。这个库支持多种复杂的邮件功能,包括HTML邮件、多部分邮件、附件、SMTP身份验证、SSL/TLS加密等。 ### 2. 主要功能 ...

    activation commons-email-1.5 javax.mail

    例如,以下是一个基本的使用Apache Commons Email发送邮件的代码片段: ```java import org.apache.commons.mail.*; public class SimpleEmailExample { public static void main(String[] args) { SimpleEmail ...

    java邮件功能三大jar包commons-email-1.3.3,activation,mail.zip

    通常,你需要在项目的类路径中包含这三个库,然后导入相应的JavaMail和Commons Email类,就可以编写代码来创建和发送邮件了。例如: ```java import org.apache.commons.mail.*; // 创建Email对象 SimpleEmail ...

    commons-email-1.3.1-bin

    7. **性能优化**:为了提高效率,Apache Commons Email 还允许批量发送邮件,减少了网络通信的次数,提高了邮件发送的效率。 在学习和使用 Commons Email 1.3.1 时,建议从基础实例开始,逐步理解各个方法的功能和...

    commons-email-1.3.jar_mail.jar_activation.jar

    如果需要发送HTML邮件或附件,可以利用Apache Commons Email提供的类。最后,使用`Transport`发送邮件。 例如,一个简单的Java邮件发送代码片段可能是这样的: ```java import org.apache.commons.mail.*; try { ...

    commons-email-1.3.3,activation,mail

    总的来说,Apache Commons Email 1.3.3,activation和JavaMail API共同构成了Java平台强大的邮件处理工具箱,使得开发者能够轻松地实现邮件的创建、格式化和发送,同时支持各种复杂的邮件格式和安全协议。...

    commons-email

    在Java应用程序中,`commons-email`库极大地简化了通过SMTP(简单邮件传输协议)和其他邮件协议发送邮件的过程。 1. **SMTP支持**: `commons-email`库提供了SMTP(Simple Mail Transfer Protocol)的支持,使得...

    ant发邮件所需的jar(activation.jar+javax.mail.jar+mail.jar+commons-email-1.2.jar)

    3. **mail.jar**:在某些情况下,javax.mail.jar可能会包含在名为mail.jar的文件中,它是JavaMail API的完整实现,包含了发送邮件所需的所有组件。 4. **commons-email-1.2.jar**:这是Apache Commons Email库,...

    commons-email-1.1-all源代码

    由于Apache Commons Email是基于JavaMail构建的,因此它可以无缝地与JavaMail的其他功能结合,例如使用`Session`对象配置邮件会话,或利用JavaMail的`Message`类进行更复杂的邮件操作。 6. **API文档与学习资源** ...

    jmail commons-email-1.1.rar

    接着,我们关注`commons-email`,这是Apache Commons项目的一部分,提供了一套高级的邮件发送API。相比jmail,它更专注于邮件的创建和发送,支持多种邮件格式,包括HTML和纯文本。commons-email库不仅支持基本的邮件...

    commons-email-1.3.2-bin.zip

    这个"commons-email-1.3.2-bin.zip"文件包含了Apache Commons Email 1.3.2版本的所有必要资源,特别是jar文件,它是开发者在Java应用中集成邮件发送功能的关键组件。 Apache Commons Email库提供了丰富的API,使得...

Global site tag (gtag.js) - Google Analytics