JavaMail通过IMAP和POP3接收未读以及设置已读邮件

[html]  view plain copy
  1. javamailpop3imap  
  2. 使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。  
  3.   
  4. 此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。如:Message message = folder.getMessage(messageNumber);  
  5.   
  6. pop3和imap主要区别就是能否判断邮件状态的问题,其他的操作都差不多.  
  7.   
  8. pop3收邮件和解析邮件:  
  9. Java代码  收藏代码  
  10.   
  11.     package com.clxx.test;      
  12.           
  13.     import java.io.FileOutputStream;      
  14.     import java.io.IOException;      
  15.     import java.io.InputStream;      
  16.     import java.io.OutputStream;      
  17.     import java.util.Enumeration;      
  18.     import java.util.Properties;      
  19.           
  20.     import javax.mail.BodyPart;      
  21.     import javax.mail.Folder;      
  22.     import javax.mail.Message;      
  23.     import javax.mail.MessagingException;      
  24.     import javax.mail.Multipart;      
  25.     import javax.mail.Session;      
  26.     import javax.mail.Store;      
  27.     import javax.mail.internet.MimeMultipart;      
  28.           
  29.     public class Email2 {      
  30.           
  31.         public static void main(String args[]) throws MessagingException,      
  32.                 IOException {      
  33.             Properties props = new Properties();      
  34.             props.setProperty("mail.store.protocol", "pop3");      
  35.             props.setProperty("mail.pop3.host", "pop3.sohu.com");      
  36.             Session session = Session.getDefaultInstance(props);      
  37.             Store store = session.getStore("pop3");      
  38.             store.connect("username@sohu.com", "password");      
  39.             Folder folder = store.getFolder("INBOX");      
  40.             folder.open(Folder.READ_WRITE);      
  41.           
  42.             // 全部邮件数      
  43.             int messageCount = folder.getMessageCount();      
  44.             System.out.println(messageCount);      
  45.             Message[] messages = folder.getMessages();      
  46.             for (int i = 0; i < messages.length; i++) {      
  47.                 Message message = messages[i];      
  48.                 System.out.println(message.getSubject());      
  49.                 // 删除邮件      
  50.                 // message.setFlag(Flags.Flag.DELETED, true);      
  51.                 // 标记为已读      
  52.                 // message.setFlag(Flags.Flag.SEEN, true);      
  53.                       
  54.                 //pop3没有判断邮件是否为已读的功能,要使用Imap才可以      
  55.                 /*Flags flags = message.getFlags();    
  56.                 if (flags.contains(Flags.Flag.SEEN))    
  57.                     System.out.println("这是一封已读邮件");    
  58.                 else {    
  59.                     System.out.println("未读邮件");    
  60.                     message.setFlag(Flags.Flag.SEEN, true);    
  61.                 }*/      
  62.                 System.out.println("发送时间:" + message.getSentDate());      
  63.                 System.out.println("主题:" + message.getSubject());      
  64.                 System.out.println("内容:" + message.getContent());      
  65.                 //获取所有的Header,头信息      
  66.                 Enumeration headers = message.getAllHeaders();      
  67.                 System.out.println("----------------------allHeaders-----------------------------");      
  68.             /*  while (headers.hasMoreElements()) {    
  69.                     Header header = (Header)headers.nextElement();    
  70.                     System.out.println(header.getName()+" ======= "+header.getValue());    
  71.                 }*/      
  72.                       
  73.                 //解析邮件内容      
  74.                 Object content = message.getContent();      
  75.                 if (content instanceof MimeMultipart) {      
  76.                     MimeMultipart multipart = (MimeMultipart) content;      
  77.                     parseMultipart(multipart);      
  78.                 }      
  79.                 System.out      
  80.                         .println("========================================================");      
  81.                 System.out      
  82.                         .println("========================================================");      
  83.           
  84.             }      
  85.           
  86.             folder.close(true);      
  87.             store.close();      
  88.         }      
  89.               
  90.         /**    
  91.          * 对复杂邮件的解析    
  92.          * @param multipart    
  93.          * @throws MessagingException    
  94.          * @throws IOException    
  95.          */      
  96.         public static void parseMultipart(Multipart multipart) throws MessagingException, IOException {      
  97.             int count = multipart.getCount();      
  98.             System.out.println("couont =  "+count);      
  99.             for (int idx=0;idx<count;idx++) {      
  100.                 BodyPart bodyPart = multipart.getBodyPart(idx);      
  101.                 System.out.println(bodyPart.getContentType());      
  102.                 if (bodyPart.isMimeType("text/plain")) {      
  103.                     System.out.println("plain................."+bodyPart.getContent());      
  104.                 } else if(bodyPart.isMimeType("text/html")) {      
  105.                     System.out.println("html..................."+bodyPart.getContent());      
  106.                 } else if(bodyPart.isMimeType("multipart/*")) {      
  107.                     Multipart mpart = (Multipart)bodyPart.getContent();      
  108.                     parseMultipart(mpart);      
  109.                           
  110.                 } else if (bodyPart.isMimeType("application/octet-stream")) {      
  111.                     String disposition = bodyPart.getDisposition();      
  112.                     System.out.println(disposition);      
  113.                     if (disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)) {      
  114.                         String fileName = bodyPart.getFileName();      
  115.                         InputStream is = bodyPart.getInputStream();      
  116.                         copy(is, new FileOutputStream("D:\\"+fileName));      
  117.                     }      
  118.                 }      
  119.             }      
  120.         }      
  121.               
  122.         /**      
  123.          * 文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载      
  124.          * @param is      
  125.          * @param os      
  126.          * @throws IOException      
  127.          */      
  128.         public static void copy(InputStream is, OutputStream os) throws IOException {      
  129.             byte[] bytes = new byte[1024];      
  130.             int len = 0;      
  131.             while ((len=is.read(bytes)) != -1 ) {      
  132.                 os.write(bytes, 0, len);      
  133.             }      
  134.             if (os != null)      
  135.                 os.close();      
  136.             if (is != null)      
  137.                 is.close();      
  138.         }      
  139.     }      
  140.   
  141.   
  142.   
  143.   
  144.   
  145.   
  146.   
  147. 使用imap协议接收邮件:  
  148.   
  149.     
  150. Java代码  收藏代码  
  151.   
  152.     package com.clxx.test;      
  153.              
  154.        import java.util.Properties;      
  155.              
  156.        import javax.mail.Flags;      
  157.        import javax.mail.Folder;      
  158.        import javax.mail.Message;      
  159.        import javax.mail.Session;      
  160.              
  161.        import com.sun.mail.imap.IMAPFolder;      
  162.        import com.sun.mail.imap.IMAPStore;      
  163.              
  164.        /**    
  165.         * 使用imap协议获取未读邮件数    
  166.         *     
  167.         * @author w    
  168.         *     
  169.         */      
  170.        public class Email3 {      
  171.              
  172.            public static void main(String[] args) throws Exception {      
  173.                String user = "username@sohu.com";// 邮箱的用户名      
  174.                String password = "password"; // 邮箱的密码      
  175.              
  176.                Properties prop = System.getProperties();      
  177.                prop.put("mail.store.protocol", "imap");      
  178.                prop.put("mail.imap.host", "imap.sohu.com");      
  179.              
  180.                Session session = Session.getInstance(prop);      
  181.                      
  182.                int total = 0;      
  183.                IMAPStore store = (IMAPStore) session.getStore("imap"); // 使用imap会话机制,连接服务器      
  184.                store.connect(user, password);      
  185.                IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱      
  186.                folder.open(Folder.READ_WRITE);      
  187.                // 获取总邮件数      
  188.                total = folder.getMessageCount();      
  189.                System.out.println("-----------------共有邮件:" + total      
  190.                        + " 封--------------");      
  191.                // 得到收件箱文件夹信息,获取邮件列表      
  192.                System.out.println("未读邮件数:" + folder.getUnreadMessageCount());      
  193.                Message[] messages = folder.getMessages();      
  194.                int messageNumber = 0;      
  195.                for (Message message : messages) {      
  196.                    System.out.println("发送时间:" + message.getSentDate());      
  197.                    System.out.println("主题:" + message.getSubject());      
  198.                    System.out.println("内容:" + message.getContent());      
  199.                    Flags flags = message.getFlags();      
  200.                    if (flags.contains(Flags.Flag.SEEN))      
  201.                        System.out.println("这是一封已读邮件");      
  202.                    else {      
  203.                        System.out.println("未读邮件");      
  204.                    }      
  205.                    System.out      
  206.                            .println("========================================================");      
  207.                    System.out      
  208.                            .println("========================================================");      
  209.                    //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件      
  210.                    messageNumber = message.getMessageNumber();      
  211.                }      
  212.                Message message = folder.getMessage(messageNumber);      
  213.                System.out.println(message.getContent()+message.getContentType());      
  214.                // 释放资源      
  215.                if (folder != null)      
  216.                    folder.close(true);       
  217.                if (store != null)      
  218.                    store.close();      
  219.            }      
  220.              
  221.        }      
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值