上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操作,在介绍这些类之前,我们先来了解下邮件接收API的体系结构,JavaMail API中定义了一个java.mail.Store类,它用于执行邮件的接收任务,我们在程序中调用这个类中的方法可以获取邮箱中的各个邮件夹的信息。JavaMail使用Folder对象表示邮件夹,通过Folder对象的方法可以获取邮件夹中的所有邮件信息,而我们知道邮件的信息可以使用Message对象来表示,Message类中就包含了操作邮件的各种方法了,例如获取邮件的发送者,主题,正文内容,发送时间等,它们工作关系如下:

1、从Session对象中获得实现了某种邮件发送协议的Store对象;

2、登录邮箱,连接上POP3或者IMAP4服务器;

3、调用Store的getFolder方法,获取邮箱中的某个邮件夹的Folder对象;

4、调用Folder对象中的getMessage或getMessages方法,获取邮件夹中的某一封邮件或者是所有邮件,每一封的邮件以一个Message对象返回。

接下来我们用以上类来接收邮件

  1. import java.util.Properties;
  2.  
  3. import javax.mail.Address;
  4. import javax.mail.Folder;
  5. import javax.mail.Message;
  6. import javax.mail.Session;
  7. import javax.mail.Store;
  8.  
  9. class MailReceives {
  10. public static void main(String[] args) throws Exception {
  11. // 定义连接POP3服务器的属性信息
  12. String pop3Server = "pop.qq.com";
  13. String protocol = "pop3";
  14. String username = "123456@qq.com";
  15. String password = "****************"; // QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
  16.  
  17. Properties props = new Properties();
  18. props.setProperty("mail.transport.protocol", protocol); // 使用的协议(JavaMail规范要求)
  19. props.setProperty("mail.smtp.host", pop3Server); // 发件人的邮箱的 SMTP服务器地址
  20.  
  21. // 获取连接
  22. Session session = Session.getDefaultInstance(props);
  23. session.setDebug(false);
  24.  
  25. // 获取Store对象
  26. Store store = session.getStore(protocol);
  27. store.connect(pop3Server, username, password); // POP3服务器的登陆认证
  28.  
  29. // 通过POP3协议获得Store对象调用这个方法时,邮件夹名称只能指定为"INBOX"
  30. Folder folder = store.getFolder("INBOX");// 获得用户的邮件帐户
  31. folder.open(Folder.READ_WRITE); // 设置对邮件帐户的访问权限
  32.  
  33. Message[] messages = folder.getMessages();// 得到邮箱帐户中的所有邮件
  34.  
  35. for (Message message : messages) {
  36. String subject = message.getSubject();// 获得邮件主题
  37. Address from = (Address) message.getFrom()[0];// 获得发送者地址
  38. System.out.println("邮件的主题为: " + subject + "\t发件人地址为: " + from);
  39. System.out.println("邮件的内容为:");
  40. message.writeTo(System.out);// 输出邮件内容到控制台
  41. }
  42.  
  43. folder.close(false);// 关闭邮件夹对象
  44. store.close(); // 关闭连接对象
  45. }
  46. }

控制台输出结果:

可以看到控制台输出的是邮件的原始内容,还未被解析,所以需要经过解析才能阅读,下一篇JavaMail入门第五篇 解析邮件将讲解如何解析邮件。

JavaMail入门第四篇 接收邮件的更多相关文章

  1. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  2. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  3. Hadoop入门第四篇:手动搭建自己的hadoop小集群

    前言 好几天没有更新了,本来是应该先写HDFS的相关内容,但是考虑到HDFS是我们后面所有学习的基础,而我只是简单的了解了一下而已,后面准备好好整理HDFS再写这块.所以大家在阅读这篇文章之前,请先了 ...

  4. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  5. TYUT程序设计入门第四讲练习题题解--数论入门

    程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...

  6. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

  7. 大数据入门第四天——基础部分之轻量级RPC框架的开发

    一.概述 .掌握RPC原理 .掌握nio操作 .掌握netty简单的api .掌握自定义RPC框架 主要内容 1.RPC是什么 RPC(Remote Procedure Call)—远程过程调用,它是 ...

  8. CTF---密码学入门第四题 困在栅栏里的凯撒

    困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...

  9. Hadoop入门第五篇:Hive简介以及部署

    标签(空格分隔): Hadoop Hive hwi 1.Hive简介   之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...

随机推荐

  1. ASP.NET 4.0 potentially dangerous Request.Form value was detected

    A few days ago, while working on an ASP.NET 4.0 Web project, I got an issue. The issue was, when use ...

  2. React-Native入门指导之iOS篇 —— 一、准备工作

    React-Native 入门指导系列教程目录 一.准备工作 (已完成) 二.项目介绍与调试 三.CSS样式与Flex布局 四.常用UI控件的使用 五.JSX在React-Native中的应用 六.事 ...

  3. Unity5网络模块UNet介绍

    前段时间,研究了一下UNet,经过项目实践,大致整理了下遇到的问题. 源码Bitbucket:需要说明的是,这个项目只包含上层的包装,一些低层的网络实现在Unity内部,如NetworkTranspo ...

  4. Linux监控工具 (Linux Monitor Tools)

    最近发现几个好用的工具,顺便总结下. Zabbix和Nagios属于重量级,企业级Service procps-ng: top, free, ps, pgrep, vmstat ... sysstat ...

  5. is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of 40 GB virtual memory used

    昨天使用hadoop跑五一的数据,发现报错: Container [pid=,containerID=container_1453101066555_4130018_01_000067] GB phy ...

  6. VARCHAR 详解

    varchar(20):20指的是表中的a字段能存储的最大字符个数 In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-by ...

  7. 蓝凌OA二次开发手册

    1.蓝凌OA表单前端调用后台数据 一.后台存储过程: create procedure sp_test @ftext nvarchar(50) as begin select @ftext as '测 ...

  8. scanf中的[]

    今天被问到一个问题,如何用scanf将 hello-my-world中的三个单词, hello my world 分别放到三个char数组中去 于是用到了scanf中的[] [ ] 扫描字符集合,比如 ...

  9. ruby self.included用法

    ===Module#included 当一个模块混入到类时,如果该模块的included方法已经定义,那么该方法被调用.该方法的唯一参数就是接受混含的类的名字. module M def self.i ...

  10. 使用tomcat作为web应用容器时,启用新线程找不到Session的问题

    今天做一个功能,为了快速响应前端,业务完成后,另起了一个线程做一些不影响业务的统计工作,然后立即将业务操作结果返回给前台. 结果在新线程里报空指针找不到request对象.检查了下,我们用的是stru ...