.Net转Java自学之路—基础巩固篇三十二(JavaMail)

commons-fileupload组件:
  commons-fileupload.jar
  commons-io.jar
  该组件会解析request中的上传数据,解析后的结果是一个表单项数据封装到一个FileItem对象中,只需调用FileItem中的方法即可。

上传三步:相关类

  工厂:DisFileItemFactory

  解析器:ServletFileUpload

  表单项:FileItem

//ServletFileUpload:
    setFileSizeMax(n*1024);//限制单个文件大小
    setSizeMax(1024*1024*n);//限制整个表单大小nM
//FileItem:
    /*普通表单项相关*/
    boolean isFormField();//是否为普通表单项。true为普通表单项,false为文件表单项
    String getFieldName();//返回当前表单项的名称。
    String getString(String charset);//返回表单项的值。
    /*文件表单项相关*/
    String getName();//获取上传的文件名称。
    long getSize();//获取上传文件字节数。
    InputStream getInputStream();//获取上传文件对应的输入流。
    void write(File destFile);//将上传文件内容保存到指定文件中。
    String getContentType();//获取文件类型
//设置缓存大小与临时目录:
    new DiskFileItemFactory(n*1024,new File("C:/temp"));
    /*
    * n*1024:缓存大小
    * new File("C:/temp"):硬盘临时目录
    */

下载:就是向客户端响应字节流。
  下载要求:俩个头一个流。
    Content-Type:传输给客户端的文件是生命MIME类型,例:image/pjpeg。通过文件名称调用ServletContext的getMimeType()得到MIME类型。
    Content-Disposetion:默认值为inline,表示在浏览器窗口中打开,attachment;filename=xxx。在filename=后面跟显示在下载框中的文件名称。

实例:上传图片

<form action="<c:url value="/TestUploadServlet">" method="post" enctype="multipart/form-data">
    文件名称:<input type="text" name="filename" />
    文件上传:<input type="file" name="nfile" />
    <input type="submit" value="上传" />
</form>
public class TestUploadServlet extends HttpServlet {
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        DisFileItemFactory dfactory=new DisFileItemFactory();
        ServletFileUpload sfu=new ServletFileUpload(dfactory);
        try{
            List<FileItem> fileItemList=sfu.parseRequest(request);
            FileItem fi1=fileItemList.get(0);//对应普通表单项
            FileItem fi2=fileItemList.get(1);//对应文件表单项

            String path=this.getServletContext().getRealPath("/WEB-INF/files/");//存储的跟路径

            File destFile=new File(path);
            fi2.write(destFile);//保存
        }catch(FileUploadException ex){

        }catch(Exception ex){

        }

    }
}

JavaMail:

  是Java提供的一组API,用来发送和接收邮件。

  邮件协议:

    与http提供的一组API,用来发送和接收邮件。

    SMTP:Simple Mail Transfer Protocol 简单邮件传输协议;发送邮件协议。默认端口号:25

    POP3:Post Office Protocol Version 3 邮局协议第三版;接收邮件协议。默认端口号:110

    IMAP:Internet Message Access Protocol 因特网消息访问协议,收发邮件协议。

  核心类:

    Session:得到Session,需要使用Session.getInstance(Properties,Authenricator);

    MimeMessage:表示一个邮件对象,它有一系列的setXXX()的设置方法。

    TransPort:它只有一个发邮件的功能。

  当发送包含附件的邮件时,邮件体为多部件形式。

    1、创建一个多部件的部件内容。MimeMultipart

      MimeMultipart就是一个集合,用来装载多个主体部件。

    2、需要创建俩个主体部件,一个为文本内容,另一个为附件。

      主体部分:MimeBodyPart

    3、把MimeMultipart设置给MimeMessage的内容。

实例:发送普通邮件

Propertes prop=new Propertes();
prop.setProperty("mail.host","smtp.163.com");//设置服务器
prop.setProperty("mail.smtp.auth","true");

Authenticator auth=new Authenticator(){
    protected PasswordAuthentication getPassworkAuthentication(){
        return new PasswordAuthentication("用户名","密码");
    }
}

Session session=Session.getInstance(prop,auth);

MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress("fajianren@163.com"));//设置发件人
msg.setRecipients(RecipientType.TO,"shoujian@126.com");//设置收件人
msg.setRecipients(RecipientType.CC,"chaosong@126.com");//设置抄送
msg.setRecipients(RecipientType.BCC,"ansong@126.com");//设置暗送

msg.setSubject("标题");
msg.setContent("邮件内容","text/html;charset=utf-8");

Transport.send(msg);//发送。

实例:发送带有附件的邮件

Propertes prop=new Propertes();
prop.setProperty("mail.host","smtp.163.com");//设置服务器
prop.setProperty("mail.smtp.auth","true");

Authenticator auth=new Authenticator(){
    protected PasswordAuthentication getPassworkAuthentication(){
        return new PasswordAuthentication("用户名","密码");
    }
}

Session session=Session.getInstance(prop,auth);

MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress("fajianren@163.com"));//设置发件人
msg.setRecipients(RecipientType.TO,"shoujian@126.com");//设置收件人
msg.setRecipients(RecipientType.CC,"chaosong@126.com");//设置抄送
msg.setRecipients(RecipientType.BCC,"ansong@126.com");//设置暗送

msg.setSubject("标题");

MimeMultipart list=new MimeMultipart();//创建多部分主体

MimeBodyPart part=new MimeBodyPart();//创建MimeBodyPart
part.setContent("邮件内容","text/html;charset=utf-8");
list.addBodyPart(part);

MimeBodyPart part2=new MimeBodyPart();//创建MimeBodyPart
part2.attachFile(new File(path));//设置附件的内容。
part2.setFileName(MimeUtility.encodingText("附件名称"));//设置附件中显示的附件名称,其中MimeUtility.encodingText设置乱码问题
list.addBodyPart(part2);

msg.setContent(list);//把它设置给邮件作为邮件内容

Transport.send(msg);//发送。

原文地址:https://www.cnblogs.com/drop/p/10430204.html

时间: 2024-11-06 07:45:30

.Net转Java自学之路—基础巩固篇三十二(JavaMail)的相关文章

.Net转Java自学之路—基础巩固篇二十一(模块化思想)

Java 9 出现的 模块化思想/技术 优点:文件体积缩小,权限体系更精准 module-info.java 模块描述信息文件 module 本模块名称{ exports(导出)  对外暴露的包路径; requires  需要依赖的其他模块名称; } 新建: 右击项目>>Configure>>Create module-info.java>>小写英文模块名称 设置依赖信息 1.再新建的模块文件中写入 requires 模块名称: 2.右击项目>>Build

.Net转Java自学之路—基础巩固篇十八(正则)

正则表达式: 正则就是用于操作字符串的规则.其中是以一些符号来标识规则. 字符类: [] :范围 - :连接符 ^ :非 预定义字符类: . :任何字符 \d :数字 \D :非数字 \s :空白字符 \S :非空白字符 \w :单词字符 \W:非单词字符 边界匹配器: ~ :行开头 $ :行结尾 \b :单词边界 组: () 当组进行嵌套时可以通过从左到右来计算其开括号来编号.组0代表的是整个表达式 实例:(.)\\1+ 为了提高规则复用,用()进行封装,每个括号都是一个编号,从1开始 为了复

#Java学习之路——基础阶段(第十篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉. 这里说一句题外话,互联网寒冬,Java处于负增长饱和状态,python语言登顶等等消息都让我犹豫要不要换语言

.Net转Java自学之路—SpringMVC框架篇二(入门案例)

前端控制器配置,在web.xml中配置前端控制器. <!-- springmvc前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmv

salesforce 零基础学习(三十二)通过Streams和DOM方式读写XML

有的时候我们需要对XML进行读写操作,常用的XML操作主要有Streams和DOM方式. 一.Streams方式 Streams常用到的类主要有两个XmlStreamReader 以及XmlStreamWriter. XmlStreamReader:此种读取方式的读的特点为从上而下读,下图是根据reader的EventType自上而下的运行步骤. 我们将此xml读取后封装到一个Goods的List中,Goods包括item,name以及type属性,代码如下: /* * 假定目前XML数据样式为

【转】JAVA自学之路

JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势. 一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的

马士兵:JAVA自学之路

JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训.决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢?我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧. 每个培训机构都会宣传自己的好处,并不能说明大的趋势.一些新闻文章很有可能是枪手写的,不必太过相信.国外背景的教师和课

[转载] JAVA自学之路

原文链接http://blog.csdn.net/mengxin846/article/details/2219844 虽然文章有点旧但还是有些启发的,譬如要事第一,好读书不求甚解. JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当 成学生

Java 自学之路

Java 自学之路 前言 从运行第一个程序开始算起,我接触编程也有三年的时间了.最初是从51单片机入门学习的C语言,班里面的大佬带着我一起做小项目,但是因为没人教,基本靠自学,学得慢,写的代码也烂,很没有章法.后来大三下半学期开始准备考研(从电子跨考计算机),从零开始学习数据结构,这才算是真正地入了编程的门.至于考研,后来就放弃了(别问我为什么放弃,当时脑子抽了),去了一家小公司实习.这家公司主要做机器视觉的项目,当时去面试的时候觉得挺高大上,技术 leader 也挺和蔼,感觉是很务实的一个团队