首页   资讯   精华   论坛   问答   博客   专栏   群组   更多  

招聘搜索

您还未登录 !     登录     注册  

XZY的学习笔记

  • 博客

  • 微博

  • 相册

  • 收藏

  • 留言

  • 关于我

xiangzhengyan

javamail接收邮件(较全)          

博客分类:Java EE

CC++C#OS 

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. }  

   

分享到:                

第一个Hibernate with Annotation程式(转 ...      |       javamail发送邮件(简)    

  • 2007-06-02 21:59

  • 浏览 35904

  • 评论(14)

  • 相关推荐

评论

   

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页面里一条一条的显示出邮件的日期,标题,发件人,点击进去,查看邮件具体内容,这该怎么做呢。能指点指点么。我邮箱[email protected]

1 楼     maweiqiang    2008-06-04  

你好啊,你的这个接受邮件我看了,确实写的很不错啊,我们老师也让我们做一个收发邮件,但是收邮件这里我不太明白,麻烦你能把你收邮件的代码包括页面给我看下吗。非常感谢啊,大哥我的邮箱是[email protected]

发表评论

 您还没有登录,请您登录后再发表评论

xiangzhengyan

  • 浏览: 63611 次

  • 性别:

  • 来自: 北京

最近访客 更多访客>>

dylinshi126

shuitao.cao

smile_clj

Hundun_Wu

文章分类
  • 全部博客 (32)

  • Java EE (3)

  • Java SE (2)

  • Hibernate (3)

  • Spring (5)

  • database (1)

  • tools (2)

  • jBPM (2)

  • linux (0)

  • report (1)

  • js (4)

  • 读书笔记-非技术 (3)

  • eclipse (1)

社区版块
  • 我的资讯 (0)

  • 我的论坛 (1)

  • 我的问答 (0)

存档分类
  • 2013-11 (1)

  • 2012-07 (1)

  • 2011-09 (1)

  • 更多存档...

最新评论
  • hsjshijiazhuang:                   另外再指出,此程序针对于windows vista 以上系统, ...
    javamail接收邮件(较全)

  • hsjshijiazhuang:                   这里面有错误,我修改了,具体修改是:第216行中,if语句中增 ...
    javamail接收邮件(较全)

  • llxiyuel:                   大哥,怎么解析邮件正文输出纯文本
    javamail接收邮件(较全)

  • yiwanxinyuefml:                   请教一个问题,不知道其他人有没碰到过:就是用javamail接 ...
    javamail接收邮件(较全)

  • amwyyyy:                   不错不错   
    javamail接收邮件(较全)


声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
2003-2014 ITeye.com.   All rights reserved.  [ 京ICP证110151号  京公网安备110105010620 ]