JavaMail:简单的邮件接收程序
2016-03-22 14:49
525 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/4441222.html
实现了 JavaMail 中邮件内容的创建、邮件的发送,现在就看看怎样接收邮件了。
邮件的接收与邮件的发送的基本操作步骤很类似,邮件的发送需要用到 Transport 类,邮件的接收则需要使用 Store 类,而不管是发送还是接收, Session 类和 Properties 类都是必需的。使用 Properties 对象设置连接 SMTP 服务器、 POP3 服务器的主机名、协议等,通过 Properties 对象获取应用于整个邮件程序所必须的 Session 对象,它保存了建立网络连接的会话信息,保持了邮件程序与服务器通信的环境信息。
不同的是:
邮件的接收中还要用到 Folder 类,它表示邮件夹,这是邮件的接收比邮件的发送多出来的一个类。现在有些邮箱时支持把邮件分开放在各个用户命名的邮件夹中,邮件夹里面就有好多邮件了。
各个类的操作流程:
1、创建一个 Properties 对象,该类在 java.util 包中,以键-值对的形式设置邮件接收中需要用到的传输协议,如 POP3 协议,此外还可以设置想要连接的 POP3 服务器的主机名;
2、先使用 Session 类中静态的 getInstance() 或getDefaultInstance() 获得自身对象,此时调用这两个方法时应该传入上面创建的 Properties 对象;
3、再用 Session 对象调用 getStore() 方法获得 Store 抽象类的具体实现子类对象,如 POP3Store 类,不过这不用我们关心,Session 对象会根据 Properties 对象中已经设置好的连接协议进行创建并返回;
4、使用得到的 Store 对象通过 Store.getFolder() 方法获得邮箱中的邮件夹 Folder 对象,它包含了邮箱中的所有邮件,因此使用 Folder 对象的 Folder.getMessages() 方法则可以返回邮件夹中的所有邮件 Message 对象了
5、获得了 Message 对象之后,怎么处理里面的内容则是邮件解析的工作了,不过在这里我们还是可以打印出邮件内的原始内容。
程序要求:
获得邮箱中的所有邮件,打印出邮件的发件人地址、主题,并由用户选择是否打开邮件(目前的程序只能打开邮件的原始内容)。我们由于测试的邮箱为 testhao@126.com ,用户名为
testhao ,密码为 123456 ,需要连接的 POP3 服务器为 pop3.126.com 。我们先用其他邮箱向该邮箱发送一封简单的纯文本邮件,如下图:
实现代码:
测试结果:
1、用户输入是否打开邮件
2、邮件的原始内容,由于并未解析邮件,所以是一些被编码过的内容,需要解析才能读懂。
至此,简单的邮件接收程序就完成了,这与之前用 Windows 下的 telnet 程序在控制台敲入一条条命令来接收邮件相比,简单得多了。
我的相关文章:
图解使用telnet程序手工接收邮件及其过程
图解使用Telnet程序手工发送邮件
JavaMail入门:创建纯文本、HTML格式的邮件
本文出自 “蚂蚁” 博客,请务必保留此出处/article/4441222.html
实现了 JavaMail 中邮件内容的创建、邮件的发送,现在就看看怎样接收邮件了。
邮件的接收与邮件的发送的基本操作步骤很类似,邮件的发送需要用到 Transport 类,邮件的接收则需要使用 Store 类,而不管是发送还是接收, Session 类和 Properties 类都是必需的。使用 Properties 对象设置连接 SMTP 服务器、 POP3 服务器的主机名、协议等,通过 Properties 对象获取应用于整个邮件程序所必须的 Session 对象,它保存了建立网络连接的会话信息,保持了邮件程序与服务器通信的环境信息。
不同的是:
邮件的接收中还要用到 Folder 类,它表示邮件夹,这是邮件的接收比邮件的发送多出来的一个类。现在有些邮箱时支持把邮件分开放在各个用户命名的邮件夹中,邮件夹里面就有好多邮件了。
各个类的操作流程:
1、创建一个 Properties 对象,该类在 java.util 包中,以键-值对的形式设置邮件接收中需要用到的传输协议,如 POP3 协议,此外还可以设置想要连接的 POP3 服务器的主机名;
2、先使用 Session 类中静态的 getInstance() 或getDefaultInstance() 获得自身对象,此时调用这两个方法时应该传入上面创建的 Properties 对象;
3、再用 Session 对象调用 getStore() 方法获得 Store 抽象类的具体实现子类对象,如 POP3Store 类,不过这不用我们关心,Session 对象会根据 Properties 对象中已经设置好的连接协议进行创建并返回;
4、使用得到的 Store 对象通过 Store.getFolder() 方法获得邮箱中的邮件夹 Folder 对象,它包含了邮箱中的所有邮件,因此使用 Folder 对象的 Folder.getMessages() 方法则可以返回邮件夹中的所有邮件 Message 对象了
5、获得了 Message 对象之后,怎么处理里面的内容则是邮件解析的工作了,不过在这里我们还是可以打印出邮件内的原始内容。
程序要求:
获得邮箱中的所有邮件,打印出邮件的发件人地址、主题,并由用户选择是否打开邮件(目前的程序只能打开邮件的原始内容)。我们由于测试的邮箱为 testhao@126.com ,用户名为
testhao ,密码为 123456 ,需要连接的 POP3 服务器为 pop3.126.com 。我们先用其他邮箱向该邮箱发送一封简单的纯文本邮件,如下图:
实现代码:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; /** * 简单的邮件接收程序,打印出邮件的原始内容 * @author haolloyin */ public class SimpleStoreMails { public static void main(String[] args) throws Exception { // 连接pop3服务器的主机名、协议、用户名、密码 String pop3Server = "pop3.126.com"; String protocol = "pop3"; String user = "testhao"; String pwd = "123456"; // 创建一个有具体连接信息的Properties对象 Properties props = new Properties(); props.setProperty("mail.store.protocol", protocol); props.setProperty("mail.pop3.host", pop3Server); // 使用Properties对象获得Session对象 Session session = Session.getInstance(props); session.setDebug(true); // 利用Session对象获得Store对象,并连接pop3服务器 Store store = session.getStore(); store.connect(pop3Server, user, pwd); // 获得邮箱内的邮件夹Folder对象,以"只读"打开 Folder folder = store.getFolder("inbox"); folder.open(Folder.READ_ONLY); // 获得邮件夹Folder内的所有邮件Message对象 Message [] messages = folder.getMessages(); int mailCounts = messages.length; for(int i = 0; i < mailCounts; i++) { String subject = messages[i].getSubject(); String from = (messages[i].getFrom()[0]).toString(); System.out.println("第 " + (i+1) + "封邮件的主题:" + subject); System.out.println("第 " + (i+1) + "封邮件的发件人地址:" + from); System.out.println("是否打开该邮件(yes/no)?:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); if("yes".equalsIgnoreCase(input)) { // 直接输出到控制台中 messages[i].writeTo(System.out); } } folder.close(false); store.close(); } }
测试结果:
1、用户输入是否打开邮件
2、邮件的原始内容,由于并未解析邮件,所以是一些被编码过的内容,需要解析才能读懂。
至此,简单的邮件接收程序就完成了,这与之前用 Windows 下的 telnet 程序在控制台敲入一条条命令来接收邮件相比,简单得多了。
我的相关文章:
图解使用telnet程序手工接收邮件及其过程
图解使用Telnet程序手工发送邮件
JavaMail入门:创建纯文本、HTML格式的邮件
本文出自 “蚂蚁” 博客,请务必保留此出处/article/4441222.html
相关文章推荐
- windows系统部署discuz并和javaweb账号连通同步
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- 转IBM官网 利用 Java dump 进行 JVM 故障诊断
- 详解Spring MVC 4常用的那些注解
- java 消息机制 ActiveMQ入门实例
- Spring的IOC和AOP
- java中的一些对象
- Java 性能优化手册 — 提高 Java 代码性能的各种技巧
- Spring Security(08)——intercept-url配置
- struts2中的constant配置详解
- java软件开发工程师的简历
- 基于Spring 4.0 的 Web Socket 聊天室/游戏服务端简单架构
- 使用Spring的注解方式实现AOP
- Eclipse Mars.2 Release (4.5.2)中构建Maven web项目出错
- java建造者模式
- HashSet源码剖析
- Spring-mvc静态资源无法加载
- (转) java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
- 拦截器
- JAVA8 十大新特性详解