使用javaMail收邮件

本文深入探讨了JavaMail中使用POP3和IMAP协议收发邮件的区别,包括如何通过MessageNumber获取邮件,以及如何判断邮件是否为已读状态。重点介绍了两种协议在邮件状态判断上的差异,并提供了Java代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。
       此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。如:Messagemessage = folder.getMessage(messageNumber);
pop3和imap主要区别就是能否判断邮件状态的问题,其他的操作都差不多.
pop3收邮件和解析邮件:
Java代码

  1. package com.clxx.test;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.OutputStream;  
  7. import java.util.Enumeration;  
  8. import java.util.Properties;  
  9.   
  10. import javax.mail.BodyPart;  
  11. import javax.mail.Folder;  
  12. import javax.mail.Message;  
  13. import javax.mail.MessagingException;  
  14. import javax.mail.Multipart;  
  15. import javax.mail.Session;  
  16. import javax.mail.Store;  
  17. import javax.mail.internet.MimeMultipart;  
  18.   
  19. public class Email2  
  20.   
  21.     public static void main(String args[]) throws MessagingException,  
  22.             IOException  
  23.         Properties props new Properties();  
  24.         props.setProperty("mail.store.protocol""pop3");  
  25.         props.setProperty("mail.pop3.host""pop3.sohu.com");  
  26.         Session session Session.getDefaultInstance(props);  
  27.         Store store session.getStore("pop3");  
  28.         store.connect("username@sohu.com""password");  
  29.         Folder folder store.getFolder("INBOX");  
  30.         folder.open(Folder.READ_WRITE);  
  31.   
  32.         // 全部邮件数  
  33.         int messageCount folder.getMessageCount();  
  34.         System.out.println(messageCount);  
  35.         Message[] messages folder.getMessages();  
  36.         for (int 0messages.length; i++)  
  37.             Message message messages[i];  
  38.             System.out.println(message.getSubject());  
  39.             // 删除邮件  
  40.             // message.setFlag(Flags.Flag.DELETED, true);  
  41.             // 标记为已读  
  42.             // message.setFlag(Flags.Flag.SEEN, true);  
  43.               
  44.             //pop3没有判断邮件是否为已读的功能,要使用Imap才可以  
  45.               
  46.             System.out.println("发送时间:" message.getSentDate());  
  47.             System.out.println("主题:" message.getSubject());  
  48.             System.out.println("内容:" message.getContent());  
  49.             //获取所有的Header,头信息  
  50.             Enumeration headers message.getAllHeaders();  
  51.             System.out.println("----------------------allHeaders-----------------------------");  
  52.           
  53.               
  54.             //解析邮件内容  
  55.             Object content message.getContent();  
  56.             if (content instanceof MimeMultipart)  
  57.                 MimeMultipart multipart (MimeMultipart) content;  
  58.                 parseMultipart(multipart);  
  59.              
  60.             System.out  
  61.                     .println("========================================================");  
  62.             System.out  
  63.                     .println("========================================================");  
  64.   
  65.          
  66.   
  67.         folder.close(true);  
  68.         store.close();  
  69.      
  70.       
  71.       
  72.     public static void parseMultipart(Multipart multipart) throws MessagingException, IOException  
  73.         int count multipart.getCount();  
  74.         System.out.println("couont  "+count);  
  75.         for (int idx=0;idx<count;idx++)  
  76.             BodyPart bodyPart multipart.getBodyPart(idx);  
  77.             System.out.println(bodyPart.getContentType());  
  78.             if (bodyPart.isMimeType("text/plain"))  
  79.                 System.out.println("plain................."+bodyPart.getContent());  
  80.             else if(bodyPart.isMimeType("text/html"))  
  81.                 System.out.println("html..................."+bodyPart.getContent());  
  82.             else if(bodyPart.isMimeType("multipart  
  83.     public static void copy(InputStream is, OutputStream os) throws IOException  
  84.         byte[] bytes new byte[1024];  
  85.         int len 0 
  86.         while ((len=is.read(bytes)) != -1  
  87.             os.write(bytes, 0len);  
  88.          
  89.         if (os != null 
  90.             os.close();  
  91.         if (is != null 
  92.             is.close();  
  93.      
  94.       
  95.   
  96.  
使用imap协议接收邮件:
Java代码
  1. package com.clxx.test;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import javax.mail.Flags;  
  6. import javax.mail.Folder;  
  7. import javax.mail.Message;  
  8. import javax.mail.Session;  
  9.   
  10. import com.sun.mail.imap.IMAPFolder;  
  11. import com.sun.mail.imap.IMAPStore;  
  12.   
  13.   
  14. public class Email3  
  15.   
  16.     public static void main(String[] args) throws Exception  
  17.         String user "username@sohu.com";// 邮箱的用户名  
  18.         String password "password"// 邮箱的密码  
  19.   
  20.         Properties prop System.getProperties();  
  21.         prop.put("mail.store.protocol""imap");  
  22.         prop.put("mail.imap.host""imap.sohu.com");  
  23.   
  24.         Session session Session.getInstance(prop);  
  25.           
  26.         int total 0 
  27.         IMAPStore store (IMAPStore) session.getStore("imap"); // 使用imap会话机制,连接服务器  
  28.         store.connect(user, password);  
  29.         IMAPFolder folder (IMAPFolder) store.getFolder("INBOX"); // 收件箱  
  30.         folder.open(Folder.READ_WRITE);  
  31.         // 获取总邮件数  
  32.         total folder.getMessageCount();  
  33.         System.out.println("-----------------共有邮件:" total  
  34.                 封--------------");  
  35.         // 得到收件箱文件夹信息,获取邮件列表  
  36.         System.out.println("未读邮件数:" folder.getUnreadMessageCount());  
  37.         Message[] messages folder.getMessages();  
  38.         int messageNumber 0 
  39.         for (Message message messages)  
  40.             System.out.println("发送时间:" message.getSentDate());  
  41.             System.out.println("主题:" message.getSubject());  
  42.             System.out.println("内容:" message.getContent());  
  43.             Flags flags message.getFlags();  
  44.             if (flags.contains(Flags.Flag.SEEN))  
  45.                 System.out.println("这是一封已读邮件");  
  46.             else  
  47.                 System.out.println("未读邮件");  
  48.              
  49.             System.out  
  50.                     .println("========================================================");  
  51.             System.out  
  52.                     .println("========================================================");  
  53.             //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件  
  54.             messageNumber message.getMessageNumber();  
  55.          
  56.         Message message folder.getMessage(messageNumber);  
  57.         System.out.println(message.getContent()+message.getContentType());  
  58.         // 释放资源  
  59.         if (folder != null 
  60.             folder.close(true);   
  61.         if (store != null 
  62.             store.close();  
  63.      
  64.   
  65. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值