使用java mail来收取邮件,较之发送邮件稍显复杂。如下图:
具体步骤如下:
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。