设为首页 收藏本站
查看: 909|回复: 0

[经验分享] 利用Apache commons-email组件发送邮件

[复制链接]

尚未签到

发表于 2017-1-6 07:51:45 | 显示全部楼层 |阅读模式
本程序利用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/>
<formaction="<%=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中发布运行

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324428-1-1.html 上篇帖子: apache+JK+tomcat负载均衡配置(windows) 下篇帖子: 用Apache Spark进行大数据处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表