使用javaMail收邮件 支持附件下载

news/2024/11/8 3:01:58/

javaMail 发送 复杂 邮件 附件

使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。

 

此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。如:Message message = 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 i = 0; i < messages.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.             /*Flags flags = message.getFlags();  
  46.             if (flags.contains(Flags.Flag.SEEN))  
  47.                 System.out.println("这是一封已读邮件");  
  48.             else {  
  49.                 System.out.println("未读邮件");  
  50.                 message.setFlag(Flags.Flag.SEEN, true);  
  51.             }*/  
  52.             System.out.println("发送时间:" + message.getSentDate());   
  53.             System.out.println("主题:" + message.getSubject());   
  54.             System.out.println("内容:" + message.getContent());   
  55.             //获取所有的Header,头信息   
  56.             Enumeration headers = message.getAllHeaders();   
  57.             System.out.println("----------------------allHeaders-----------------------------");   
  58.         /*  while (headers.hasMoreElements()) {  
  59.                 Header header = (Header)headers.nextElement();  
  60.                 System.out.println(header.getName()+" ======= "+header.getValue());  
  61.             }*/  
  62.                
  63.             //解析邮件内容   
  64.             Object content = message.getContent();   
  65.             if (content instanceof MimeMultipart) {   
  66.                 MimeMultipart multipart = (MimeMultipart) content;   
  67.                 parseMultipart(multipart);   
  68.             }   
  69.             System.out   
  70.                     .println("========================================================");   
  71.             System.out   
  72.                     .println("========================================================");   
  73.   
  74.         }   
  75.   
  76.         folder.close(true);   
  77.         store.close();   
  78.     }   
  79.        
  80.     /**  
  81.      * 对复杂邮件的解析  
  82.      * @param multipart  
  83.      * @throws MessagingException  
  84.      * @throws IOException  
  85.      */  
  86.     public static void parseMultipart(Multipart multipart) throws MessagingException, IOException {   
  87.         int count = multipart.getCount();   
  88.         System.out.println("couont =  "+count);   
  89.         for (int idx=0;idx<count;idx++) {   
  90.             BodyPart bodyPart = multipart.getBodyPart(idx);   
  91.             System.out.println(bodyPart.getContentType());   
  92.             if (bodyPart.isMimeType("text/plain")) {   
  93.                 System.out.println("plain................."+bodyPart.getContent());   
  94.             } else if(bodyPart.isMimeType("text/html")) {   
  95.                 System.out.println("html..................."+bodyPart.getContent());   
  96.             } else if(bodyPart.isMimeType("multipart/*")) {   
  97.                 Multipart mpart = (Multipart)bodyPart.getContent();   
  98.                 parseMultipart(mpart);   
  99.                    
  100.             } else if (bodyPart.isMimeType("application/octet-stream")) {   
  101.                 String disposition = bodyPart.getDisposition();   
  102.                 System.out.println(disposition);   
  103.                 if (disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)) {   
  104.                     String fileName = bodyPart.getFileName();   
  105.                     InputStream is = bodyPart.getInputStream();   
  106.                     copy(is, new FileOutputStream("D:\\"+fileName));   
  107.                 }   
  108.             }   
  109.         }   
  110.     }   
  111.        
  112.     /**   
  113.      * 文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载   
  114.      * @param is   
  115.      * @param os   
  116.      * @throws IOException   
  117.      */   
  118.     public static void copy(InputStream is, OutputStream os) throws IOException {   
  119.         byte[] bytes = new byte[1024];   
  120.         int len = 0;   
  121.         while ((len=is.read(bytes)) != -1 ) {   
  122.             os.write(bytes, 0, len);   
  123.         }   
  124.         if (os != null)   
  125.             os.close();   
  126.         if (is != null)   
  127.             is.close();   
  128.     }   
  129.        
  130.   
  131. }  
package com.clxx.test;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Properties;import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMultipart;public class Email2 {public static void main(String args[]) throws MessagingException,IOException {Properties props = new Properties();props.setProperty("mail.store.protocol", "pop3");props.setProperty("mail.pop3.host", "pop3.sohu.com");Session session = Session.getDefaultInstance(props);Store store = session.getStore("pop3");store.connect("username@sohu.com", "password");Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_WRITE);// 全部邮件数int messageCount = folder.getMessageCount();System.out.println(messageCount);Message[] messages = folder.getMessages();for (int i = 0; i < messages.length; i++) {Message message = messages[i];System.out.println(message.getSubject());// 删除邮件// message.setFlag(Flags.Flag.DELETED, true);// 标记为已读// message.setFlag(Flags.Flag.SEEN, true);//pop3没有判断邮件是否为已读的功能,要使用Imap才可以/*Flags flags = 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,头信息Enumeration headers = message.getAllHeaders();System.out.println("----------------------allHeaders-----------------------------");/*	while (headers.hasMoreElements()) {Header header = (Header)headers.nextElement();System.out.println(header.getName()+" ======= "+header.getValue());}*///解析邮件内容Object content = message.getContent();if (content instanceof MimeMultipart) {MimeMultipart multipart = (MimeMultipart) content;parseMultipart(multipart);}System.out.println("========================================================");System.out.println("========================================================");}folder.close(true);store.close();}/*** 对复杂邮件的解析* @param multipart* @throws MessagingException* @throws IOException*/public static void parseMultipart(Multipart multipart) throws MessagingException, IOException {int count = multipart.getCount();System.out.println("couont =  "+count);for (int idx=0;idx<count;idx++) {BodyPart bodyPart = multipart.getBodyPart(idx);System.out.println(bodyPart.getContentType());if (bodyPart.isMimeType("text/plain")) {System.out.println("plain................."+bodyPart.getContent());} else if(bodyPart.isMimeType("text/html")) {System.out.println("html..................."+bodyPart.getContent());} else if(bodyPart.isMimeType("multipart/*")) {Multipart mpart = (Multipart)bodyPart.getContent();parseMultipart(mpart);} else if (bodyPart.isMimeType("application/octet-stream")) {String disposition = bodyPart.getDisposition();System.out.println(disposition);if (disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)) {String fileName = bodyPart.getFileName();InputStream is = bodyPart.getInputStream();copy(is, new FileOutputStream("D:\\"+fileName));}}}}/*** 文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载* @param is* @param os* @throws IOException*/public static void copy(InputStream is, OutputStream os) throws IOException {byte[] bytes = new byte[1024];int len = 0;while ((len=is.read(bytes)) != -1 ) {os.write(bytes, 0, len);}if (os != null)os.close();if (is != null)is.close();}}

 

 

使用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.  * 使用imap协议获取未读邮件数  
  15.  *   
  16.  * @author w  
  17.  *   
  18.  */  
  19. public class Email3 {   
  20.   
  21.     public static void main(String[] args) throws Exception {   
  22.         String user = "username@sohu.com";// 邮箱的用户名   
  23.         String password = "password"// 邮箱的密码   
  24.   
  25.         Properties prop = System.getProperties();   
  26.         prop.put("mail.store.protocol""imap");   
  27.         prop.put("mail.imap.host""imap.sohu.com");   
  28.   
  29.         Session session = Session.getInstance(prop);   
  30.            
  31.         int total = 0;   
  32.         IMAPStore store = (IMAPStore) session.getStore("imap"); // 使用imap会话机制,连接服务器   
  33.         store.connect(user, password);   
  34.         IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱   
  35.         folder.open(Folder.READ_WRITE);   
  36.         // 获取总邮件数   
  37.         total = folder.getMessageCount();   
  38.         System.out.println("-----------------共有邮件:" + total   
  39.                 + " 封--------------");   
  40.         // 得到收件箱文件夹信息,获取邮件列表   
  41.         System.out.println("未读邮件数:" + folder.getUnreadMessageCount());   
  42.         Message[] messages = folder.getMessages();   
  43.         int messageNumber = 0;   
  44.         for (Message message : messages) {   
  45.             System.out.println("发送时间:" + message.getSentDate());   
  46.             System.out.println("主题:" + message.getSubject());   
  47.             System.out.println("内容:" + message.getContent());   
  48.             Flags flags = message.getFlags();   
  49.             if (flags.contains(Flags.Flag.SEEN))   
  50.                 System.out.println("这是一封已读邮件");   
  51.             else {   
  52.                 System.out.println("未读邮件");   
  53.             }   
  54.             System.out   
  55.                     .println("========================================================");   
  56.             System.out   
  57.                     .println("========================================================");   
  58.             //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件   
  59.             messageNumber = message.getMessageNumber();   
  60.         }   
  61.         Message message = folder.getMessage(messageNumber);   
  62.         System.out.println(message.getContent()+message.getContentType());   
  63.         // 释放资源   
  64.         if (folder != null)   
  65.             folder.close(true);    
  66.         if (store != null)   
  67.             store.close();   
  68.     }   
  69.   
  70. }

http://www.ppmy.cn/news/333059.html

相关文章

电邮里面是图片怎么下载_什么是电子邮件| 第三部分

电邮里面是图片怎么下载 电子邮件和法律 (Email and law) With the development of the Internet as indispensable working tool, litigation related to its use in the workplace was developed concurrently. The French judge was asked repeatedly about the rights of t…

电子邮件(E-mail)和电子邮件协议

一、电子邮件是什么 1.1、电子邮件简介 电子邮件(electronic mail,简称E-mail)又称电子信箱、电子邮箱,它是—种用网络手段提供信息交换的通信方式,利用电信号传递和存储电子文件、图片、音视频等各类型信息,可以使人们在任何地点、任何时间进行收发信件,解决了时空的限…

hotmail手机端_hotmail邮箱app下载

hotmail邮箱是一个非常古老的手机邮箱软件了&#xff0c;虽然现在已经很少人会使用&#xff0c;但是对于一直喜欢它的人来说&#xff0c;它是最好有的邮箱app了&#xff0c;它的界面简单&#xff0c;清新自然&#xff0c;让你想要查阅哪一封邮件都能一下找到&#xff0c;非常方…

发送电子邮件

发送电子邮件&#xff0c;在你的站点上添加一个用户&#xff0c;改用的电子邮件地址为&#xff1a; g089h515r806gmail.com.在添加改用的时候&#xff0c;向这个用户的电子邮件地址发送一封邮件&#xff0c;表示为它创建了一个账户。 warning: mail() [function.mail]: Failed…

怎么申请电子邮箱,电子邮件大全,商务人士都在用这个!

既然点进文章那不用多说&#xff0c;一定都是都是商务精英。商务人士作为职场中的精英&#xff0c;在邮箱选择方面应该如何选择呢&#xff1f;让我们来看看其他职场人都在用什么邮箱 一、职场精英阿亮 在外谈生意&#xff0c;递出自己的名片从来都是最自信的&#xff0c;不为…

免费临时邮箱大全,专注个人隐私保护

注册时不想泄露自己邮箱时可用 24小时邮箱&#xff1a;http://24mail.chacuo.net60分钟邮箱&#xff1a;https://www.guerrillamail.com/zh/10 分钟邮箱&#xff1a;https://linshiyouxiang.net/10 分钟邮箱&#xff1a;http://www.bccto.me/10 分钟邮箱&#xff1a;https://t…

电子邮件介绍

​电子邮件&#xff08;Electronic Mail&#xff0c;缩写E-Mail或email&#xff09;是一种用电子手段提供信息交换的通信方式&#xff0c;是互联网应用最广的服务。通过网络的电子邮件系统&#xff0c;用户可以以非常低廉的价格&#xff08;不管发送到哪里&#xff0c;都只需负…

电子邮件签名模板_15个网站下载免费的电子邮件通讯模板

您可以从中获得大量资源&#xff0c;以获取创意和免费的电子邮件通讯设计 。 但是&#xff0c;本文为您带来了一个站点列表&#xff0c;这些站点不仅提供高质量和免费的新闻稿模板&#xff0c;而且不需要任何注册或注册&#xff08;尽管某些站点需要您的电子邮件地址才能向您发…