`
xiangzhengyan
  • 浏览: 126453 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javamail接收邮件(较全)

阅读更多
java 代码
  1. import java.io.*;   
  2. import java.text.*;   
  3. import java.util.*;   
  4. import javax.mail.*;   
  5. import javax.mail.internet.*;   
  6.   
  7. /**  
  8.  * 有一封邮件就需要建立一个ReciveMail对象  
  9.  */  
  10. public class ReciveOneMail {   
  11.     private MimeMessage mimeMessage = null;   
  12.     private String saveAttachPath = ""//附件下载后的存放目录   
  13.     private StringBuffer bodytext = new StringBuffer();//存放邮件内容   
  14.     private String dateformat = "yy-MM-dd HH:mm"//默认的日前显示格式   
  15.   
  16.     public ReciveOneMail(MimeMessage mimeMessage) {   
  17.         this.mimeMessage = mimeMessage;   
  18.     }   
  19.   
  20.     public void setMimeMessage(MimeMessage mimeMessage) {   
  21.         this.mimeMessage = mimeMessage;   
  22.     }   
  23.   
  24.     /**  
  25.      * 获得发件人的地址和姓名  
  26.      */  
  27.     public String getFrom() throws Exception {   
  28.         InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();   
  29.         String from = address[0].getAddress();   
  30.         if (from == null)   
  31.             from = "";   
  32.         String personal = address[0].getPersonal();   
  33.         if (personal == null)   
  34.             personal = "";   
  35.         String fromaddr = personal + "<" + from + ">";   
  36.         return fromaddr;   
  37.     }   
  38.   
  39.     /**  
  40.      * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址  
  41.      */  
  42.     public String getMailAddress(String type) throws Exception {   
  43.         String mailaddr = "";   
  44.         String addtype = type.toUpperCase();   
  45.         InternetAddress[] address = null;   
  46.         if (addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) {   
  47.             if (addtype.equals("TO")) {   
  48.                 address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);   
  49.             } else if (addtype.equals("CC")) {   
  50.                 address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);   
  51.             } else {   
  52.                 address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);   
  53.             }   
  54.             if (address != null) {   
  55.                 for (int i = 0; i < address.length; i++) {   
  56.                     String email = address[i].getAddress();   
  57.                     if (email == null)   
  58.                         email = "";   
  59.                     else {   
  60.                         email = MimeUtility.decodeText(email);   
  61.                     }   
  62.                     String personal = address[i].getPersonal();   
  63.                     if (personal == null)   
  64.                         personal = "";   
  65.                     else {   
  66.                         personal = MimeUtility.decodeText(personal);   
  67.                     }   
  68.                     String compositeto = personal + "<" + email + ">";   
  69.                     mailaddr += "," + compositeto;   
  70.                 }   
  71.                 mailaddr = mailaddr.substring(1);   
  72.             }   
  73.         } else {   
  74.             throw new Exception("Error emailaddr type!");   
  75.         }   
  76.         return mailaddr;   
  77.     }   
  78.   
  79.     /**  
  80.      * 获得邮件主题  
  81.      */  
  82.     public String getSubject() throws MessagingException {   
  83.         String subject = "";   
  84.         try {   
  85.             subject = MimeUtility.decodeText(mimeMessage.getSubject());   
  86.             if (subject == null)   
  87.                 subject = "";   
  88.         } catch (Exception exce) {}   
  89.         return subject;   
  90.     }   
  91.   
  92.     /**  
  93.      * 获得邮件发送日期  
  94.      */  
  95.     public String getSentDate() throws Exception {   
  96.         Date sentdate = mimeMessage.getSentDate();   
  97.         SimpleDateFormat format = new SimpleDateFormat(dateformat);   
  98.         return format.format(sentdate);   
  99.     }   
  100.   
  101.     /**  
  102.      * 获得邮件正文内容  
  103.      */  
  104.     public String getBodyText() {   
  105.         return bodytext.toString();   
  106.     }   
  107.   
  108.     /**  
  109.      * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析  
  110.      */  
  111.     public void getMailContent(Part part) throws Exception {   
  112.         String contenttype = part.getContentType();   
  113.         int nameindex = contenttype.indexOf("name");   
  114.         boolean conname = false;   
  115.         if (nameindex != -1)   
  116.             conname = true;   
  117.         System.out.println("CONTENTTYPE: " + contenttype);   
  118.         if (part.isMimeType("text/plain") && !conname) {   
  119.             bodytext.append((String) part.getContent());   
  120.         } else if (part.isMimeType("text/html") && !conname) {   
  121.             bodytext.append((String) part.getContent());   
  122.         } else if (part.isMimeType("multipart/*")) {   
  123.             Multipart multipart = (Multipart) part.getContent();   
  124.             int counts = multipart.getCount();   
  125.             for (int i = 0; i < counts; i++) {   
  126.                 getMailContent(multipart.getBodyPart(i));   
  127.             }   
  128.         } else if (part.isMimeType("message/rfc822")) {   
  129.             getMailContent((Part) part.getContent());   
  130.         } else {}   
  131.     }   
  132.   
  133.     /**   
  134.      * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"  
  135.      */   
  136.     public boolean getReplySign() throws MessagingException {   
  137.         boolean replysign = false;   
  138.         String needreply[] = mimeMessage   
  139.                 .getHeader("Disposition-Notification-To");   
  140.         if (needreply != null) {   
  141.             replysign = true;   
  142.         }   
  143.         return replysign;   
  144.     }   
  145.   
  146.     /**  
  147.      * 获得此邮件的Message-ID  
  148.      */  
  149.     public String getMessageId() throws MessagingException {   
  150.         return mimeMessage.getMessageID();   
  151.     }   
  152.   
  153.     /**  
  154.      * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】  
  155.      */  
  156.     public boolean isNew() throws MessagingException {   
  157.         boolean isnew = false;   
  158.         Flags flags = ((Message) mimeMessage).getFlags();   
  159.         Flags.Flag[] flag = flags.getSystemFlags();   
  160.         System.out.println("flags's length: " + flag.length);   
  161.         for (int i = 0; i < flag.length; i++) {   
  162.             if (flag[i] == Flags.Flag.SEEN) {   
  163.                 isnew = true;   
  164.                 System.out.println("seen Message.......");   
  165.                 break;   
  166.             }   
  167.         }   
  168.         return isnew;   
  169.     }   
  170.   
  171.     /**  
  172.      * 判断此邮件是否包含附件  
  173.      */  
  174.     public boolean isContainAttach(Part part) throws Exception {   
  175.         boolean attachflag = false;   
  176.         String contentType = part.getContentType();   
  177.         if (part.isMimeType("multipart/*")) {   
  178.             Multipart mp = (Multipart) part.getContent();   
  179.             for (int i = 0; i < mp.getCount(); i++) {   
  180.                 BodyPart mpart = mp.getBodyPart(i);   
  181.                 String disposition = mpart.getDisposition();   
  182.                 if ((disposition != null)   
  183.                         && ((disposition.equals(Part.ATTACHMENT)) || (disposition   
  184.                                 .equals(Part.INLINE))))   
  185.                     attachflag = true;   
  186.                 else if (mpart.isMimeType("multipart/*")) {   
  187.                     attachflag = isContainAttach((Part) mpart);   
  188.                 } else {   
  189.                     String contype = mpart.getContentType();   
  190.                     if (contype.toLowerCase().indexOf("application") != -1)   
  191.                         attachflag = true;   
  192.                     if (contype.toLowerCase().indexOf("name") != -1)   
  193.                         attachflag = true;   
  194.                 }   
  195.             }   
  196.         } else if (part.isMimeType("message/rfc822")) {   
  197.             attachflag = isContainAttach((Part) part.getContent());   
  198.         }   
  199.         return attachflag;   
  200.     }   
  201.   
  202.     /**   
  203.      * 【保存附件】   
  204.      */   
  205.     public void saveAttachMent(Part part) throws Exception {   
  206.         String fileName = "";   
  207.         if (part.isMimeType("multipart/*")) {   
  208.             Multipart mp = (Multipart) part.getContent();   
  209.             for (int i = 0; i < mp.getCount(); i++) {   
  210.                 BodyPart mpart = mp.getBodyPart(i);   
  211.                 String disposition = mpart.getDisposition();   
  212.                 if ((disposition != null)   
  213.                         && ((disposition.equals(Part.ATTACHMENT)) || (disposition   
  214.                                 .equals(Part.INLINE)))) {   
  215.                     fileName = mpart.getFileName();   
  216.                     if (fileName.toLowerCase().indexOf("gb2312") != -1) {   
  217.                         fileName = MimeUtility.decodeText(fileName);   
  218.                     }   
  219.                     saveFile(fileName, mpart.getInputStream());   
  220.                 } else if (mpart.isMimeType("multipart/*")) {   
  221.                     saveAttachMent(mpart);   
  222.                 } else {   
  223.                     fileName = mpart.getFileName();   
  224.                     if ((fileName != null)   
  225.                             && (fileName.toLowerCase().indexOf("GB2312") != -1)) {   
  226.                         fileName = MimeUtility.decodeText(fileName);   
  227.                         saveFile(fileName, mpart.getInputStream());   
  228.                     }   
  229.                 }   
  230.             }   
  231.         } else if (part.isMimeType("message/rfc822")) {   
  232.             saveAttachMent((Part) part.getContent());   
  233.         }   
  234.     }   
  235.   
  236.     /**   
  237.      * 【设置附件存放路径】   
  238.      */   
  239.   
  240.     public void setAttachPath(String attachpath) {   
  241.         this.saveAttachPath = attachpath;   
  242.     }   
  243.   
  244.     /**  
  245.      * 【设置日期显示格式】  
  246.      */  
  247.     public void setDateFormat(String format) throws Exception {   
  248.         this.dateformat = format;   
  249.     }   
  250.   
  251.     /**  
  252.      * 【获得附件存放路径】  
  253.      */  
  254.     public String getAttachPath() {   
  255.         return saveAttachPath;   
  256.     }   
  257.   
  258.     /**  
  259.      * 【真正的保存附件到指定目录里】  
  260.      */  
  261.     private void saveFile(String fileName, InputStream in) throws Exception {   
  262.         String osName = System.getProperty("os.name");   
  263.         String storedir = getAttachPath();   
  264.         String separator = "";   
  265.         if (osName == null)   
  266.             osName = "";   
  267.         if (osName.toLowerCase().indexOf("win") != -1) {   
  268.             separator = "\\";  
  269.             if (storedir == null || storedir.equals(""))  
  270.                 storedir = "c:\\tmp";  
  271.         } else {  
  272.             separator = "/";  
  273.             storedir = "/tmp";  
  274.         }  
  275.         File storefile = new File(storedir + separator + fileName);  
  276.         System.out.println("storefile's path: " + storefile.toString());  
  277.         // for(int i=0;storefile.exists();i++){  
  278.         // storefile = new File(storedir+separator+fileName+i);  
  279.         // }  
  280.         BufferedOutputStream bos = null;  
  281.         BufferedInputStream bis = null;  
  282.         try {  
  283.             bos = new BufferedOutputStream(new FileOutputStream(storefile));  
  284.             bis = new BufferedInputStream(in);  
  285.             int c;  
  286.             while ((c = bis.read()) != -1) {  
  287.                 bos.write(c);  
  288.                 bos.flush();  
  289.             }  
  290.         } catch (Exception exception) {  
  291.             exception.printStackTrace();  
  292.             throw new Exception("文件保存失败!");  
  293.         } finally {  
  294.             bos.close();  
  295.             bis.close();  
  296.         }  
  297.     }  
  298.  
  299.     /**  
  300.      * PraseMimeMessage类测试  
  301.      */  
  302.     public static void main(String args[]) throws Exception {  
  303.         Properties props = System.getProperties();  
  304.         props.put("mail.smtp.host", "smtp.163.com");  
  305.         props.put("mail.smtp.auth", "true");  
  306.         Session session = Session.getDefaultInstance(props, null);  
  307.         URLName urln = new URLName("pop3", "pop3.163.com", 110, null,  
  308.                 "xiangzhengyan", "pass");  
  309.         Store store = session.getStore(urln);  
  310.         store.connect();  
  311.         Folder folder = store.getFolder("INBOX");  
  312.         folder.open(Folder.READ_ONLY);  
  313.         Message message[] = folder.getMessages();  
  314.         System.out.println("Messages's length: " + message.length);  
  315.         ReciveOneMail pmm = null;  
  316.         for (int i = 0; i < message.length; i++) {  
  317.             System.out.println("======================");  
  318.             pmm = new ReciveOneMail((MimeMessage) message[i]);  
  319.             System.out.println("Message " + i + " subject: " + pmm.getSubject());  
  320.             System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());  
  321.             System.out.println("Message " + i + " replysign: "+ pmm.getReplySign());  
  322.             System.out.println("Message " + i + " hasRead: " + pmm.isNew());  
  323.             System.out.println("Message " + i + "  containAttachment: "+ pmm.isContainAttach((Part) message[i]));  
  324.             System.out.println("Message " + i + " form: " + pmm.getFrom());  
  325.             System.out.println("Message " + i + " to: "+ pmm.getMailAddress("to"));  
  326.             System.out.println("Message " + i + " cc: "+ pmm.getMailAddress("cc"));  
  327.             System.out.println("Message " + i + " bcc: "+ pmm.getMailAddress("bcc"));  
  328.             pmm.setDateFormat("yy年MM月dd日 HH:mm");  
  329.             System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());  
  330.             System.out.println("Message " + i + " Message-ID: "+ pmm.getMessageId());  
  331.             // 获得邮件内容===============  
  332.             pmm.getMailContent((Part) message[i]);  
  333.             System.out.println("Message " + i + " bodycontent: \r\n"  
  334.                     + pmm.getBodyText());  
  335.             pmm.setAttachPath("c:\\");   
  336.             pmm.saveAttachMent((Part) message[i]);   
  337.         }   
  338.     }   
  339. }  
分享到:
评论
16 楼 bo_hai 2016-09-23  
写的真好,学习了。非常感谢。
15 楼 首席阿若 2015-04-10  
楼主啊楼主啊楼主啊楼主啊~  我用你的收取邮件附件的时候,就是 while ((c = bis.read()) != -1)  这里就报了很奇葩的错误  
  java.io.IOException: A8 BAD Parse command error



怎么解决啊,求教
14 楼 hsjshijiazhuang 2014-03-03  
另外再指出,此程序针对于windows vista 以上系统,c盘是拒绝访问的,所以还得在其它盘符下创建附件文件,或者获得访问权限
13 楼 hsjshijiazhuang 2014-03-03  
这里面有错误,我修改了,具体修改是:第216行中,if语句中增加((fileName != null)),第219行的saveFile方法挪到if语句里面。就不会报错了
12 楼 llxiyuel 2014-03-01  
大哥,怎么解析邮件正文输出纯文本
11 楼 yiwanxinyuefml 2014-01-26  
请教一个问题,不知道其他人有没碰到过:就是用javamail接收的邮件,正文、附件都可以正常接收,但是邮件正文有一些换行符之类的东西,接收到之后写入到一个文件却是一整串没有换行符的字符串???
10 楼 amwyyyy 2013-11-29  
不错不错   
9 楼 spy41s 2013-07-23  
中文会乱码。。。
8 楼 tigerwood008 2012-01-07  
如果有附件的哈,好像会有内存溢出的问题,这个该怎么解决!
7 楼 fuanyu 2011-10-14  
确实比较全  但是我试了  邮件内容部分还是有问题耶 能否再详细解说下哦
6 楼 嘻哈方式 2011-05-26  
确实比较全  但是我试了  邮件内容部分还是有问题耶 能否再详细解说下哦
5 楼 zyh_1986 2010-09-21  
写得真不错!从里面学到不少网上很难找的东西,多谢……
4 楼 bsspirit 2010-08-12  
这个不错,很有帮助!!
3 楼 DepthJava 2010-04-12  
封装的很不错,乱码问题怎么解决的?
2 楼 containsoft 2009-11-23  
大哥,问你个问题,邮件收取进来,并保存为文件之后,要在web页面里一条一条的显示出邮件的日期,标题,发件人,点击进去,查看邮件具体内容,这该怎么做呢。能指点指点么。我邮箱containsoft@163.com
1 楼 maweiqiang 2008-06-04  
你好啊,你的这个接受邮件我看了,确实写的很不错啊,我们老师也让我们做一个收发邮件,但是收邮件这里我不太明白,麻烦你能把你收邮件的代码包括页面给我看下吗。非常感谢啊,大哥我的邮箱是maweiqiang1025@163.com

相关推荐

    JavaMail接收邮件

    本教程将详细介绍如何利用JavaMail API来接收邮件。 首先,我们需要理解JavaMail的基本概念。JavaMail API是Java平台上处理邮件的规范,它提供了邮件服务器交互的接口和类,包括连接、登录、读取、发送邮件等功能。...

    基于javamail接收邮件源代码

    在给定的标题和描述中,我们讨论的是如何使用JavaMail API来接收邮件。 首先,我们需要了解JavaMail的核心类`MimeMessage`,它是邮件消息的容器,可以存储邮件的所有信息,包括发件人、收件人、主题、正文以及附件...

    javamail接收邮件例子

    javamail接收邮件例子,我稍微改动了一下,有些错误和异常抛出了

    javamail接收(pop3)邮件

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788

    使用JAVAMail代发邮件

    JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 IMAP。 在本文中,我们将讨论如何使用 JavaMail 库来代发邮件...

    javamail 邮件解析、接收、发送程序

    很好的邮件处理代码,1.5版本,作为build path放在eclipse里面,就可以用啦! oracle官方推的,很好!jdk1.6版本以上用起来很方便。

    JAVA100例之实例48 使用JavaMail接收邮件

    以上就是关于"JAVA100例之实例48 使用JavaMail接收邮件"的主要内容,通过学习和实践这个实例,开发者将能够熟练地使用JavaMail API来实现邮件的接收功能,这对于构建自动化邮件系统或者处理邮件相关的业务需求非常有...

    javamail 收发电子邮件

    它支持多种邮件协议,如SMTP(简单邮件传输协议)用于发送邮件,IMAP(因特网消息访问协议)和POP3(邮局协议)用于接收邮件。在JavaMail中,我们不仅可以发送纯文本邮件,还可以发送HTML格式的邮件、带有附件的邮件...

    javamail发送、接收邮件

    通过解析给定文件的标题、描述、标签及部分内容,我们可以深入探讨javamail发送与接收邮件的详细教程,以及如何利用JavaMail API实现邮件功能。 ### javamail发送、接收邮件 JavaMail API是由Sun Microsystems开发...

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    这个库支持多种邮件协议,如 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议)和 IMAP(因特网消息访问协议)用于接收邮件。在这个资源中,我们将探讨如何使用 JavaMail 实现邮件的发送、接收、查看邮件数量...

    javamail收取邮件(包括附件)

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。它支持多种协议,如POP3(Post Office Protocol version 3)和IMAP(Internet Message Access Protocol),这两种协议常用于从邮件服务器...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    ### JavaMail发送邮件时遇到的问题及解决方法 在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将...

    基于Javamail的邮件收发系统(系统+文档+开题报告+任务书+外文翻译+文献综述+答辩PPT).zip

    5. 接收邮件:通过Folder和Store类操作邮件,可以实现邮件的检索、读取和删除等操作。 四、系统实现 基于Javamail的邮件收发系统实现涉及前端界面设计、后端服务开发和数据库管理。前端负责用户交互,展示邮件列表...

    javamail 回执邮件资料

    接下来,让我们深入探讨如何使用 JavaMail 发送和接收邮件。 1. **发送邮件**: - 配置 JavaMail Session:这通常涉及到设置 SMTP 服务器的属性,如主机名、端口号、用户名和密码。 - 创建 MimeMessage 对象:这...

    JavaMail发送邮件的例子

    JavaMail是一种在Java环境中发送和接收电子邮件的标准API,它提供了丰富的功能来处理复杂的邮件操作。在Struts2框架中集成JavaMail服务,可以方便地在Web应用中实现邮件的发送功能。下面我们将深入探讨JavaMail的...

    基于Javamail的邮件收发系统

    2. **邮件协议**:Javamail支持多种邮件协议,如SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol version 3)和IMAP(Internet Message Access Protocol)用于接收邮件。...

    基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT).zip

    它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。 开发环境:JDK1.6 + Windows平台 开发技术:Javamail 开发工具:Eclipse3.4 运行环境:PC上需安装JDK1.6,且正确配置环境变量。 ...

    怎么用JavaMail收取邮件

    首先,我们需要知道发送邮件通常使用 SMTP(简单邮件传输协议),而接收邮件则涉及到 POP3(邮局协议)和 IMAP(互联网消息访问协议)。POP3 是一种较老的协议,它将邮件存储在服务器的一个单一收件箱中,而 IMAP 则...

    JavaMail 具备垃圾邮件过滤功能的邮箱

    JavaMail 是一个强大的Java库,它允许开发人员在Java应用程序中实现邮件的发送、接收以及管理功能。这个项目不仅提供了SMTP、POP3和IMAP协议的支持,还包含了丰富的API,可以方便地处理邮件的MIME编码、附件、HTML...

    javaMail发送和接收邮件

    3. **接收邮件** - **连接邮箱**:使用 `Folder` 类的 `open()` 方法连接到邮件服务器上的邮箱,如 "INBOX"。 - **获取邮件**:调用 `Folder` 的 `getMessages()` 或 `fetch()` 方法获取邮箱中的所有邮件。 - **...

Global site tag (gtag.js) - Google Analytics