javaMail收邮件 代码程序

来源:达内山东中心 网址:www.sdtarena.com


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

  1. packagecom.clxx.test;
  2. importjava.io.FileOutputStream;
  3. importjava.io.IOException;
  4. importjava.io.InputStream;
  5. importjava.io.OutputStream;
  6. importjava.util.Enumeration;
  7. importjava.util.Properties;
  8. importjavax.mail.BodyPart;
  9. importjavax.mail.Folder;
  10. importjavax.mail.Message;
  11. importjavax.mail.MessagingException;
  12. importjavax.mail.Multipart;
  13. importjavax.mail.Session;
  14. importjavax.mail.Store;
  15. importjavax.mail.internet.MimeMultipart;
  16. publicclassEmail2{
  17. publicstaticvoidmain(Stringargs[])throwsMessagingException,
  18. IOException{
  19. Propertiesprops=newProperties();
  20. props.setProperty("mail.store.protocol","pop3");
  21. props.setProperty("mail.pop3.host","pop3.sohu.com");
  22. Sessionsession=Session.getDefaultInstance(props);
  23. Storestore=session.getStore("pop3");
  24. store.connect("username@sohu.com","password");
  25. Folderfolder=store.getFolder("INBOX");
  26. folder.open(Folder.READ_WRITE);
  27. //全部邮件数
  28. intmessageCount=folder.getMessageCount();
  29. System.out.println(messageCount);
  30. Message[]messages=folder.getMessages();
  31. for(inti=0;i<messages.length;i++){
  32. Messagemessage=messages[i];
  33. System.out.println(message.getSubject());
  34. //删除邮件
  35. //message.setFlag(Flags.Flag.DELETED,true);
  36. //标记为已读
  37. //message.setFlag(Flags.Flag.SEEN,true);
  38. //pop3没有判断邮件是否为已读的功能,要使用Imap才可以
  39. /*Flagsflags=message.getFlags();
  40. if(flags.contains(Flags.Flag.SEEN))
  41. System.out.println("这是一封已读邮件");
  42. else{
  43. System.out.println("未读邮件");
  44. message.setFlag(Flags.Flag.SEEN,true);
  45. }*/
  46. System.out.println("发送时间:"+message.getSentDate());
  47. System.out.println("主题:"+message.getSubject());
  48. System.out.println("内容:"+message.getContent());
  49. //获取所有的Header,头信息
  50. Enumerationheaders=message.getAllHeaders();
  51. System.out.println("----------------------allHeaders-----------------------------");
  52. /*while(headers.hasMoreElements()){
  53. Headerheader=(Header)headers.nextElement();
  54. System.out.println(header.getName()+"======="+header.getValue());
  55. }*/
  56. //解析邮件内容
  57. Objectcontent=message.getContent();
  58. if(contentinstanceofMimeMultipart){
  59. MimeMultipartmultipart=(MimeMultipart)content;
  60. parseMultipart(multipart);
  61. }
  62. System.out
  63. .println("========================================================");
  64. System.out
  65. .println("========================================================");
  66. }
  67. folder.close(true);
  68. store.close();
  69. }
  70. /**
  71. *对复杂邮件的解析
  72. *@parammultipart
  73. *@throwsMessagingException
  74. *@throwsIOException
  75. */
  76. publicstaticvoidparseMultipart(Multipartmultipart)throwsMessagingException,IOException{
  77. intcount=multipart.getCount();
  78. System.out.println("couont="+count);
  79. for(intidx=0;idx<count;idx++){
  80. BodyPartbodyPart=multipart.getBodyPart(idx);
  81. System.out.println(bodyPart.getContentType());
  82. if(bodyPart.isMimeType("text/plain")){
  83. System.out.println("plain................."+bodyPart.getContent());
  84. }elseif(bodyPart.isMimeType("text/html")){
  85. System.out.println("html..................."+bodyPart.getContent());
  86. }elseif(bodyPart.isMimeType("multipart/*")){
  87. Multipartmpart=(Multipart)bodyPart.getContent();
  88. parseMultipart(mpart);
  89. }elseif(bodyPart.isMimeType("application/octet-stream")){
  90. Stringdisposition=bodyPart.getDisposition();
  91. System.out.println(disposition);
  92. if(disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)){
  93. StringfileName=bodyPart.getFileName();
  94. InputStreamis=bodyPart.getInputStream();
  95. copy(is,newFileOutputStream("D:\\"+fileName));
  96. }
  97. }
  98. }
  99. }
  100. /**
  101. *文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载
  102. *@paramis
  103. *@paramos
  104. *@throwsIOException
  105. */
  106. publicstaticvoidcopy(InputStreamis,OutputStreamos)throwsIOException{
  107. byte[]bytes=newbyte[1024];
  108. intlen=0;
  109. while((len=is.read(bytes))!=-1){
  110. os.write(bytes,0,len);
  111. }
  112. if(os!=null)
  113. os.close();
  114. if(is!=null)
  115. is.close();
  116. }
  117. }
使用imap协议接收邮件:
Java代码
  1. packagecom.clxx.test;
  2. importjava.util.Properties;
  3. importjavax.mail.Flags;
  4. importjavax.mail.Folder;
  5. importjavax.mail.Message;
  6. importjavax.mail.Session;
  7. importcom.sun.mail.imap.IMAPFolder;
  8. importcom.sun.mail.imap.IMAPStore;
  9. /**
  10. *使用imap协议获取未读邮件数
  11. *
  12. *@authorw
  13. *
  14. */
  15. publicclassEmail3{
  16. publicstaticvoidmain(String[]args)throwsException{
  17. Stringuser="username@sohu.com";//邮箱的用户名
  18. Stringpassword="password";//邮箱的密码
  19. Propertiesprop=System.getProperties();
  20. prop.put("mail.store.protocol","imap");
  21. prop.put("mail.imap.host","imap.sohu.com");
  22. Sessionsession=Session.getInstance(prop);
  23. inttotal=0;
  24. IMAPStorestore=(IMAPStore)session.getStore("imap");//使用imap会话机制,连接服务器
  25. store.connect(user,password);
  26. IMAPFolderfolder=(IMAPFolder)store.getFolder("INBOX");//收件箱
  27. folder.open(Folder.READ_WRITE);
  28. //获取总邮件数
  29. total=folder.getMessageCount();
  30. System.out.println("-----------------共有邮件:"+total
  31. +"封--------------");
  32. //得到收件箱文件夹信息,获取邮件列表
  33. System.out.println("未读邮件数:"+folder.getUnreadMessageCount());
  34. Message[]messages=folder.getMessages();
  35. intmessageNumber=0;
  36. for(Messagemessage:messages){
  37. System.out.println("发送时间:"+message.getSentDate());
  38. System.out.println("主题:"+message.getSubject());
  39. System.out.println("内容:"+message.getContent());
  40. Flagsflags=message.getFlags();
  41. if(flags.contains(Flags.Flag.SEEN))
  42. System.out.println("这是一封已读邮件");
  43. else{
  44. System.out.println("未读邮件");
  45. }
  46. System.out
  47. .println("========================================================");
  48. System.out
  49. .println("========================================================");
  50. //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件
  51. messageNumber=message.getMessageNumber();
  52. }
  53. Messagemessage=folder.getMessage(messageNumber);
  54. System.out.println(message.getContent()+message.getContentType());
  55. //释放资源
  56. if(folder!=null)
  57. folder.close(true);
  58. if(store!=null)
  59. store.close();
  60. }
  61. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值