`
feiniao2029
  • 浏览: 22334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JavaMail、jspsmartupload在客户端发送附件

    博客分类:
  • mail
阅读更多

OpenCms6.0.0本身已具有MailForm结构化类型用于网站在线发送邮件,可是在表单项中没有FILE,无法发送其它文件类型的附件,必须修改MailForm结构化类型,并重新去编译org.opencms.frontend.templateone.form中的内容。由于使用JavaMail来发送邮件是很简单的事,而且我本身也有已经写好的邮件发送类,只需要加入邮件附件发送的功能即可,因此决定自行编写新的类来发送邮件及其附件。

如果你用Google或是Baidu可以从网上搜到大片的使用JavaMail发送邮件及附件的例子和文章,皆由JavaMail本身的一个例子而来,此例子中先使用MimeMultipart  multi来创建一个信体(这是要发附件所必须的),然后使用MimeBodyPart mbp1 、MimeBodyPart mbp2 来分别创建多个信体内容,文本的信体内容直接使用mbp1.setText(msgText1),而要加文件附件则使用mbp2.setDataHandler(),DataHandler只按受DataSource、Object String和URL类型,例子中直接使用FileDataSource fds =new FileDataSource(filename)来创建一个DataSource,然后使用mbp2.setDataHandler(new DataHandler(fds))将这个附件放进去。filename来自本地的文件名,本身必须存在,所以它是无法使用客户端的文件名来创建的,因此看到网上有好多人使用此例子后才发现在客户端上传的文件报错无法发送附件(那是当然了,有的例子中Form中的数据都没封装,只是取得客户端的文件名去创建当然找不到文件抛出异常了)。

解决办法之一:在客户端发送邮件提交文件附件时,先上传此文件到服务器,这样才能使用上传后得到的路径和文件名来创建DataSource发送文件附件,而使用FILE表单项必须使用ENCTYPE="multipart/form-data"来封装数据,这样使用request.getParameter就无法获得表单其它选项的值了。所幸有jspsmartupload这个上传组件,它将表单中封装的数据转换成了byte[]类型,然后进行截取,将文件上传后使用myUpload.getRequest().getParameter("formname")即可获得所需要的表单提交后的值,这样虽然解决了问题,但是所发送的邮件附件文件并不是我所需要保存的,而且在上传时还进行了一次磁盘写的操作,对性能也有影响,那么为何不在文件上传读到内存中直接来创建呢,请看我的第二个解决方法。

解决方法之二:使用jspsmartupload组件将文件上传后直接取得文件流来创建DataSource。本身FileDataSource并不支持从InputStream来创建DataSource,所以我们需要编写一个新的FileDataSource,在网上已经有ByteArrayDataSource.java文件,它支持以InputStream、byte[]和String来创建DataSource,使用ByteArrayDataSource fds  =  new  ByteArrayDataSource(files,"application/octet-stream");我们即可使用InputStream、byte[]和String来创建DataSource发送文件附件。不幸的是我们无法直接使用jspsmartupload组件来取得上传文件的stream,jspsmartupload组件的文档中只有getContentString返回文件内容的String,如果附件是纯文本文件用此String来创建DataSource发送附件没有问题的,可是文件类型如果是其它格式,如Word、图片或压缩包,则文件无法使用了,另一个getBinaryData返回的是byte类型,需要循环读出,无奈之下只有反编译jspsmartupload中的File.class,在其中新加了返回InputStream,代码如下:

public InputStream getBinValue (){
InputStream ip =new DataInputStream(new ByteArrayInputStream(m_parent.m_binArray, m_startData,m_size));
return ip;

这样我们创建InputStream,使用myUpload.getFiles().getFile(0).getBinValue();获得上传文件的Stream来创建DataSource发送邮件附件,然后再关闭它。

以上两种方法均可解决在客户端发送邮件附件的问题,大家可自行取舍。

 

原文地址:http://www.maxuan.com/opencms/article/archive/200709/20070918.html

分享到:
评论

相关推荐

    基于JaVaMail的Web邮件客户端的设计与实现

    通过一个具体的案例来深入理解JavaMail在Web邮件客户端中的应用。例如,设计一个简单的Web邮件系统,包括用户注册、登录、发送邮件、接收邮件等功能,并结合实际需求,探讨如何更好地集成JavaMail API,提高系统的...

    javamail jaf jspsmartupload 开发文档

    javamail jaf jspsmartupload 开发文档,java邮件开发,文件上传等

    JSP使用组件jspSmartUpload+JavaMail+jaf+iText+jFreechart

    使用jspSmartUpload时,需要在JSP页面中添加特定的标签库,并在后台Java代码中处理上传事件。 2. **JavaMail**:JavaMail是一个用于处理电子邮件的Java API,支持SMTP、POP3、IMAP等多种协议。它提供了丰富的类和...

    JavaMail javamail java电子邮件客户端

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它提供了对各种邮件协议的支持,如 Simple Mail Transfer Protocol (SMTP)、Post Office Protocol (POP3) 和 Internet Message ...

    自己写的一个基于Javamail的邮件发送客户端

    JavaMail 使用 SMTP 客户端功能来连接到邮件服务器,验证用户身份,并发送带有附件、HTML 内容等的邮件。 3. **MIME 处理**: 在邮件中包含多种类型的内容(如文本、图片、附件)时,需要使用 MIME(多用途互联网...

    JavaMail(3)——发送带附件的邮件.docx

    在JavaMail中,发送带有附件的邮件涉及到对MIME(Multipurpose Internet Mail Extensions)标准的理解和使用。MIME扩展了邮件协议,允许在邮件中包含多媒体内容,如图片、文档、音频或视频文件等。 在JavaMail中,`...

    Gmail邮件通过JavaMail发送(不带附件与带一个附件)

    本教程将详细讲解如何使用JavaMail API在Gmail上发送邮件,包括不带附件和带有一个附件的情况。 首先,JavaMail是一个开源的Java库,它提供了用于处理邮件的标准API。在使用JavaMail发送邮件前,你需要在项目中引入...

    jsp/servlet javamail 发送邮件 可发送多个附件

    在这个场景下,我们讨论的是一个使用JSP和Servlet实现的邮件发送系统,该系统具备发送带有多个附件的功能。这个系统可能基于JavaMail API来实现邮件的发送,而JavaMail是一个强大的开源库,可以处理复杂的邮件服务...

    james和javamail实现邮件收发(带发送附件)

    在这个例子中,我们将深入探讨如何利用James服务器和JavaMail API来实现这一目标,同时处理中文内容和附件。 首先,James(Apache James)是一个开源的邮件服务器,它支持SMTP、POP3和IMAP协议,可以作为企业级的...

    基于Javamail开发的简易邮箱客户端,包括邮件发送,邮件转发,发送附件,邮件接受,邮件删除,邮件查询

    JavaMail是一种在Java环境中处理电子邮件的标准API,它允许开发者创建、发送、接收和管理电子邮件。本项目基于JavaMail开发了一个简易的邮箱客户端,提供了一系列基本的邮件操作功能,包括: 1. **邮件发送**:使用...

    javaMail 用三种方式实现发送附件

    javaMail 用附件路径,文件流 byte[] 或 base64 字符串 实现发送附件功能

    JavaMail jsp发送邮件

    ### JavaMail JSP 发送邮件的关键知识点 ...这不仅涉及了 JavaMail 的基本使用,还涵盖了 JSP 页面的基本操作以及与客户端交互的方式。通过这种方式,开发者可以快速地实现邮件发送功能,满足实际项目需求。

    JavaMail邮件发送-能发送附件和带背景音乐的邮件的小系统

    JavaMail邮件发送是一个常见的开发需求,它允许程序员通过...通过查看这些源码,你可以更深入地理解JavaMail API的使用以及如何在实际项目中集成和定制邮件发送功能。这将是一个学习和实践Java邮件发送技术的好资源。

    Android使用Javamail发送Email群发加附件

    本篇文章将详细介绍如何使用JavaMail API在Android中发送带有附件并进行群发的电子邮件。首先,我们需要理解JavaMail API的工作原理以及如何将其集成到Android项目中。 1. **集成JavaMail库** 在Android项目中,...

    06 使用JavaMail发送带附件的邮件.exe

    06 使用JavaMail发送带附件的邮件.exe06 使用JavaMail发送带附件的邮件.exe

    java 发送附件mail

    总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...

    javamail实现邮箱与邮箱发送邮件

    在提供的压缩包文件"javamail实例"中,可能包含了上述代码的完整实现以及其他相关的示例,这些示例可以帮助你更好地理解和使用JavaMail API,比如添加附件、设置HTML格式的邮件内容等。通过深入研究和实践这些示例,...

    使用JAVAMail代发邮件

    使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 ...

    javamail实现邮件发送(支持多接收人、多附件)

    本教程将详细讲解如何使用 JavaMail 实现邮件发送功能,包括支持多个接收人、抄送人以及添加多个附件。 首先,确保你已经添加了 JavaMail 的依赖库到你的项目中。如果是 Maven 项目,可以在 pom.xml 文件中添加以下...

Global site tag (gtag.js) - Google Analytics