java 开源邮件_JavaMail:简单的邮件接收程序

实现了 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 。我们先用其他邮箱向该邮箱发送一封简单的纯文本邮件,如下图:

a9da656c1e6ea368ffaa69cb1bf9260e.png

efce074afe3c06d35ca1bf06f73a16a7.png

实现代码:

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 

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、用户输入是否打开邮件

bd51dac6d86b02855f1331f841cd79d6.png

bd44173956867d0928b6f85ab2b76251.png

2、邮件的原始内容,由于并未解析邮件,所以是一些被编码过的内容,需要解析才能读懂。

25ae2b3c790aa8457f068e0e72c0998b.png

至此,简单的邮件接收程序就完成了,这与之前用 Windows 下的 telnet 程序在控制台敲入一条条命令来接收邮件相比,简单得多了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值