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

 

实现代码: 


  1. import java.io.BufferedReader;  
  2. import java.io.InputStreamReader;  
  3. import java.util.Properties;  
  4.  
  5. import javax.mail.Folder;  
  6. import javax.mail.Message;  
  7. import javax.mail.Session;  
  8. import javax.mail.Store;  
  9.  
  10. /**  
  11.  * 简单的邮件接收程序,打印出邮件的原始内容  
  12.  * @author haolloyin  
  13.  */ 
  14. public class SimpleStoreMails {  
  15.     public static void main(String[] args) throws Exception {  
  16.         // 连接pop3服务器的主机名、协议、用户名、密码  
  17.         String pop3Server = "pop3.126.com";  
  18.         String protocol = "pop3";  
  19.         String user = "testhao";  
  20.         String pwd = "123456";  
  21.           
  22.         // 创建一个有具体连接信息的Properties对象  
  23.         Properties props = new Properties();  
  24.         props.setProperty("mail.store.protocol", protocol);  
  25.         props.setProperty("mail.pop3.host", pop3Server);  
  26.           
  27.         // 使用Properties对象获得Session对象  
  28.         Session session = Session.getInstance(props);  
  29.         session.setDebug(true);  
  30.           
  31.         // 利用Session对象获得Store对象,并连接pop3服务器  
  32.         Store store = session.getStore();  
  33.         store.connect(pop3Server, user, pwd);  
  34.           
  35.         // 获得邮箱内的邮件夹Folder对象,以"只读"打开  
  36.         Folder folder = store.getFolder("inbox");  
  37.         folder.open(Folder.READ_ONLY);  
  38.           
  39.         // 获得邮件夹Folder内的所有邮件Message对象  
  40.         Message [] messages = folder.getMessages();  
  41.           
  42.         int mailCounts = messages.length;  
  43.         for(int i = 0; i < mailCounts; i++) {  
  44.               
  45.             String subject = messages[i].getSubject();  
  46.             String from = (messages[i].getFrom()[0]).toString();  
  47.               
  48.             System.out.println("第 " + (i+1) + "封邮件的主题:" + subject);  
  49.             System.out.println("第 " + (i+1) + "封邮件的发件人地址:" + from);  
  50.               
  51.             System.out.println("是否打开该邮件(yes/no)?:");  
  52.             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  53.             String input = br.readLine();  
  54.             if("yes".equalsIgnoreCase(input)) {  
  55.                 // 直接输出到控制台中  
  56.                 messages[i].writeTo(System.out);  
  57.             }             
  58.         }  
  59.         folder.close(false);  
  60.         store.close();  
  61.     }  

测试结果:

1、用户输入是否打开邮件

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

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

时间: 2024-08-03 15:35:59

JavaMail:简单的邮件接收程序的相关文章

用Javamail写的邮件接收程序

前段时间一直忙于学校里面的事情,没有时间静下心来写接收邮件的程序,现在学校里的事情终于忙完了,可以静下心里做自己喜欢做的事情了,这种感觉真的很好! 对我自己而言,刚开始在用JavaMail来编写收邮件的程序时最重要和最难的要数解析附件和邮件正文的部分,因为Mime类型实在是太多了!下面的这段代码是我自己学习JavaMail的一段体会,供大家来参考(请高手指教,有什么更好的办法,请回复此文章),具体代码如下: package coffeecatwebmail; import java.io.*;

运用C#实现POP3邮件接收程序

程序 微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受.C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能.所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理. 首先我向大家介绍邮件接收的基本原理: 一开始便是客户端与服务器的连接.不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的

一段邮件接收程序代码

问题描述 大家好,我的这段代码是用c#实现的基于POP3协议的邮件接收程序的网络编程.现在其中的一个功能是完成"把邮件服务器设置成pop.sina.com,在输入用户名和密码后,单击连接按钮来与服务器进行连接"但是当我单击了之后,却没有反映,这是怎么回事啊,大家帮我看看这段代码,看看问题出在哪里? privatevoidConnect_Click(objectsender,EventArgse){//将光标置为等待状态Cursorcr=Cursor.Current;Cursor.Current=

基于JAVAMAIL包的邮件发送程序----kangkang

程序      JavaMail API 是一个用于阅读.编写和发送电子消息的可选包(标准扩展),可以用来建立基于标准的电子邮件客户机,它配置了各种因特网邮件协,包括SMTP .POP .IMAP和 MIME ,还包括相关的 NNTP .S/MIME 及其它协议.通常开发JavaMail 程序还需要有Sun 的JavaBeans Activation Framework (JAF ).JavaBeans Activation Framework 的运行很复杂,这里简单的说就是JavaMail 的

JavaMail实现email邮件发送程序代码

JavaMail 的基础知识使用JavaMail 是发送电子邮件所需要的组件. JavaMail 的机构使处理电子邮件非常容易.下面列出了一些我们需要的类: 1.Properties JavaMail 需要Properties 来创建一个session 对象.它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机,如: Properties props = new Properties (); props.put("mail.smtp.host",

利用JavaMail API编写邮件发关程序

随着互联网的发展和计算机应用的普及,电子邮件越来越成为一种重要的通信方式.目前,有多种开发工具可以编制邮件发送程序,其中以利用JavaMail API编程最为简单.本文通过一个完整的例子介绍如何通过JavaMail API编制邮件发送程序.没有装载JavaMail API的读者,可以到www.javasoft.com站点下载JavaMail API 1.2或JavaMail API 1.3, 并按照Readme.txt设置好ClassPath.例子代码如下: import java.util.*

用JavaMail API编写可带附件的邮件发送程序

程序 利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序.也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet. (没有装载JavaMail API的读者,可以到此站点下载,并按照Readme.txt设置好ClassPath) 一.JavaMail中一些我们需要的类 1.Properties JavaMail需要Prop

为什么我写的邮件发送程序中只能发送英文字符串,而发送的汉字用邮箱接收显示的是乱码,

问题描述 我写的邮件发送程序,是把邮件内容用UTF8转换成字节序列,然后通过NetworkStram发送出去.可我用邮箱接收发送的邮件时,英文字符串可以正确显示,汉字就显示的是乱码.帮解决下,谢谢~ 解决方案 解决方案二:那你再换成别的格式试试看,不要先转换!解决方案三:编码有问题,,换成GB2132试试解决方案四:用gb2312..简体中文一般用这个.

基于JavaMail API收发邮件的方法_java

本文实例讲述了基于JavaMail API收发邮件的方法.分享给大家供大家参考.具体如下: 1.JavaMail API按其功能划分通常可分为如下三大类 (1)创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件. (2)发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议. (3)接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个