来源:达内山东中心 网址:www.sdtarena.com
使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。
此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。如:Message message = folder.getMessage(messageNumber);
pop3和imap主要区别就是能否判断邮件状态的问题,其他的操作都差不多.
pop3收邮件和解析邮件:
Java代码
- packagecom.clxx.test;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.util.Enumeration;
- importjava.util.Properties;
- importjavax.mail.BodyPart;
- importjavax.mail.Folder;
- importjavax.mail.Message;
- importjavax.mail.MessagingException;
- importjavax.mail.Multipart;
- importjavax.mail.Session;
- importjavax.mail.Store;
- importjavax.mail.internet.MimeMultipart;
- publicclassEmail2{
- publicstaticvoidmain(Stringargs[])throwsMessagingException,
- IOException{
- Propertiesprops=newProperties();
- props.setProperty("mail.store.protocol","pop3");
- props.setProperty("mail.pop3.host","pop3.sohu.com");
- Sessionsession=Session.getDefaultInstance(props);
- Storestore=session.getStore("pop3");
- store.connect("username@sohu.com","password");
- Folderfolder=store.getFolder("INBOX");
- folder.open(Folder.READ_WRITE);
- //全部邮件数
- intmessageCount=folder.getMessageCount();
- System.out.println(messageCount);
- Message[]messages=folder.getMessages();
- for(inti=0;i<messages.length;i++){
- Messagemessage=messages[i];
- System.out.println(message.getSubject());
- //删除邮件
- //message.setFlag(Flags.Flag.DELETED,true);
- //标记为已读
- //message.setFlag(Flags.Flag.SEEN,true);
- //pop3没有判断邮件是否为已读的功能,要使用Imap才可以
- /*Flagsflags=message.getFlags();
- if(flags.contains(Flags.Flag.SEEN))
- System.out.println("这是一封已读邮件");
- else{
- System.out.println("未读邮件");
- message.setFlag(Flags.Flag.SEEN,true);
- }*/
- System.out.println("发送时间:"+message.getSentDate());
- System.out.println("主题:"+message.getSubject());
- System.out.println("内容:"+message.getContent());
- //获取所有的Header,头信息
- Enumerationheaders=message.getAllHeaders();
- System.out.println("----------------------allHeaders-----------------------------");
- /*while(headers.hasMoreElements()){
- Headerheader=(Header)headers.nextElement();
- System.out.println(header.getName()+"======="+header.getValue());
- }*/
- //解析邮件内容
- Objectcontent=message.getContent();
- if(contentinstanceofMimeMultipart){
- MimeMultipartmultipart=(MimeMultipart)content;
- parseMultipart(multipart);
- }
- System.out
- .println("========================================================");
- System.out
- .println("========================================================");
- }
- folder.close(true);
- store.close();
- }
- /**
- *对复杂邮件的解析
- *@parammultipart
- *@throwsMessagingException
- *@throwsIOException
- */
- publicstaticvoidparseMultipart(Multipartmultipart)throwsMessagingException,IOException{
- intcount=multipart.getCount();
- System.out.println("couont="+count);
- for(intidx=0;idx<count;idx++){
- BodyPartbodyPart=multipart.getBodyPart(idx);
- System.out.println(bodyPart.getContentType());
- if(bodyPart.isMimeType("text/plain")){
- System.out.println("plain................."+bodyPart.getContent());
- }elseif(bodyPart.isMimeType("text/html")){
- System.out.println("html..................."+bodyPart.getContent());
- }elseif(bodyPart.isMimeType("multipart/*")){
- Multipartmpart=(Multipart)bodyPart.getContent();
- parseMultipart(mpart);
- }elseif(bodyPart.isMimeType("application/octet-stream")){
- Stringdisposition=bodyPart.getDisposition();
- System.out.println(disposition);
- if(disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)){
- StringfileName=bodyPart.getFileName();
- InputStreamis=bodyPart.getInputStream();
- copy(is,newFileOutputStream("D:\\"+fileName));
- }
- }
- }
- }
- /**
- *文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载
- *@paramis
- *@paramos
- *@throwsIOException
- */
- publicstaticvoidcopy(InputStreamis,OutputStreamos)throwsIOException{
- byte[]bytes=newbyte[1024];
- intlen=0;
- while((len=is.read(bytes))!=-1){
- os.write(bytes,0,len);
- }
- if(os!=null)
- os.close();
- if(is!=null)
- is.close();
- }
- }
- packagecom.clxx.test;
- importjava.util.Properties;
- importjavax.mail.Flags;
- importjavax.mail.Folder;
- importjavax.mail.Message;
- importjavax.mail.Session;
- importcom.sun.mail.imap.IMAPFolder;
- importcom.sun.mail.imap.IMAPStore;
- /**
- *使用imap协议获取未读邮件数
- *
- *@authorw
- *
- */
- publicclassEmail3{
- publicstaticvoidmain(String[]args)throwsException{
- Stringuser="username@sohu.com";//邮箱的用户名
- Stringpassword="password";//邮箱的密码
- Propertiesprop=System.getProperties();
- prop.put("mail.store.protocol","imap");
- prop.put("mail.imap.host","imap.sohu.com");
- Sessionsession=Session.getInstance(prop);
- inttotal=0;
- IMAPStorestore=(IMAPStore)session.getStore("imap");//使用imap会话机制,连接服务器
- store.connect(user,password);
- IMAPFolderfolder=(IMAPFolder)store.getFolder("INBOX");//收件箱
- folder.open(Folder.READ_WRITE);
- //获取总邮件数
- total=folder.getMessageCount();
- System.out.println("-----------------共有邮件:"+total
- +"封--------------");
- //得到收件箱文件夹信息,获取邮件列表
- System.out.println("未读邮件数:"+folder.getUnreadMessageCount());
- Message[]messages=folder.getMessages();
- intmessageNumber=0;
- for(Messagemessage:messages){
- System.out.println("发送时间:"+message.getSentDate());
- System.out.println("主题:"+message.getSubject());
- System.out.println("内容:"+message.getContent());
- Flagsflags=message.getFlags();
- if(flags.contains(Flags.Flag.SEEN))
- System.out.println("这是一封已读邮件");
- else{
- System.out.println("未读邮件");
- }
- System.out
- .println("========================================================");
- System.out
- .println("========================================================");
- //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件
- messageNumber=message.getMessageNumber();
- }
- Messagemessage=folder.getMessage(messageNumber);
- System.out.println(message.getContent()+message.getContentType());
- //释放资源
- if(folder!=null)
- folder.close(true);
- if(store!=null)
- store.close();
- }
- }