使用Java mail来收取邮件,较之发送邮件稍显复杂。如下图:
![](https://img-my.csdn.net/uploads/201301/07/1357549375_7810.png)
具体步骤如下:
1.从session对象中获取store对象。
store是一个抽象类,它模拟一个消息存储和访问协议,用于存储和检索消息。子类提供实际的实现。
- Properties props=new Properties();
- props.setProperty("mail.transport.protocol", "pop3");
- props.setProperty("mail.host", "pop3.sina.com");
- Session session=Session.getInstance(props, new Authenticator(){
-
- protected PasswordAuthentication getPasswordAuthentication()
- {
- return new PasswordAuthentication("******@sina.com","******");
- }
- }
- );
- Store store=session.getStore("pop3");
- store.connect("pop3.sina.com", "******@sina.com", "******");
2.调用store的getFolder方法,获取邮箱中某个邮件夹的Folder对象。
当获得此文件夹时,它是关闭的,可以对关闭的文件夹进行一些操作,如删除或重命名,但无法获得关闭文件夹中的消息。
- Folder folder=store.getFolder("INBOX");
- if(folder==null){
- System.out.println("No Inbox");
- System.exit(1);
- }
- folder.open(Folder.READ_ONLY);
注意:Folder类中定义了两个常量READ_ONLY,READ_WRITE来表示Folder的操作权限。
3.获取邮件:
Message类提供了很多操作各个消息的方法。它又获得消息各个首部字段、获得消息内容等的方法。现在,只要进行最简单的操作,即调用writeTo()在System.out显示每个消息。
操作完这些消息后,记得关闭文件夹、关闭消息存储器。
完整的代码如下:
- import java.util.Properties;
-
- import javax.mail.Authenticator;
- import javax.mail.Folder;
- import javax.mail.Message;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Store;
-
-
- public class ReciveMail {
-
- public static void main(String[] args) throws Exception{
-
- Properties props=new Properties();
- props.setProperty("mail.transport.protocol", "pop3");
- props.setProperty("mail.host", "pop3.sina.com");
- Session session=Session.getInstance(props, new Authenticator(){
-
- protected PasswordAuthentication getPasswordAuthentication()
- {
- return new PasswordAuthentication("******@sina.com","******");
- }
- }
- );
- Store store=session.getStore("pop3");
- store.connect("pop3.sina.com", "******@sina.com", "******");
- Folder folder=store.getFolder("INBOX");
- if(folder==null){
- System.out.println("No Inbox");
- System.exit(1);
- }
- folder.open(Folder.READ_ONLY);
- Message[] ms=folder.getMessages();
- for(int i=0;i<ms.length;i++){
- System.out.println("----------Message "+(i+1)+" begin-----------------");
- System.out.println("来自:"+ms[i].getFrom());
- ms[i].writeTo(System.out);
- System.out.println("----------Message "+(i+1)+"end -----------------");
- }
- folder.close(false);
- store.close();
- }
- }
如果想将上面程序移植到IMAP,唯一要做的就是将mail.transport.protocol的值换成imap。