void jButton6_actionPerformed(ActionEvent e) {
    try
     {//该程序为接受带有附件的邮件的代码
       Properties props = System.getProperties(); 
       Authenticator auth = new Email_Autherticator();  
       props.put("mail.smtp.host",host);
       props.put("mail.smtp.auth","true");
       Session session = Session.getDefaultInstance(props,auth); //建立session
       Store store = session.getStore("pop3");
       store.connect(host,username,password);    //After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
       Folder folder = store.getFolder("INBOX");
       folder.open(Folder.READ_WRITE);
       Message message[] = folder.getMessages();       for (int i=0,n=message.length;i<n;i++)//可能有多个邮件,所以用循环
         {
            //获得邮件的部分信息,如头部信息,送信人的署名,送信人的邮件地址
            String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
            String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
            System.out.println("From:"+out_from_person+"\t");
            System.out.println("Address:"+out_from_address+"\t");
            String out_subject = message[i].getSubject();
            System.out.println("Subject:"+out_subject+"\t");            //以下代码用来获取邮件的主体信息
            Part messagePart = message[i];
            Object out_content = messagePart.getContent();
            if (out_content instanceof Multipart)
              {
                 messagePart = ((Multipart)out_content).getBodyPart(0);
                 System.out.println("[ Multipart Message ]");
              }
            String out_content_type = messagePart.getContentType();
            System.out.println("CONTENT:"+out_content_type);            if (out_content_type.startsWith("text/plain") || out_content_type.startsWith("text/html"))
              {
                  InputStream ipstm = messagePart.getInputStream();
                  BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
                  String thisLine = bufreader.readLine();
                  while (thisLine != null)
                    {
                        System.out.println("thisLine: "+thisLine);
                        thisLine = bufreader.readLine();
                    }
              }
            //获取附件
            Multipart mp = (Multipart)message[i].getContent();
            for (int j=0,m=mp.getCount();j<m;j++)
              {
                 System.out.println("***"+m+"***");
                 Part part = mp.getBodyPart(j);
                 String disposition = part.getDisposition();
                 if ((disposition != null) && ((disposition.equals(part.ATTACHMENT)) || (disposition.equals(part.INLINE))))
                   {                   //以下代码将获得的附件保存到当前目录下,以part.getFileName()为文件名,也既是附件的名称。
                       File filename = new File(part.getFileName());
                       for (int k=0;filename.exists();k++)
                         {
                              filename = new File(part.getFileName()+k);
                         }
                       FileOutputStream myFileoutputstream = new FileOutputStream(filename);
                       int chunk = part.getSize();//获得附件的大小,不一定很准确。                       byte [] buffer = new byte[chunk];
                       InputStream instream = part.getInputStream();
                       instream.read(buffer,0,chunk);
                       myFileoutputstream.write(buffer,0,chunk);
                       instream.close();
                       myFileoutputstream.close();
                   }
              }
            System.out.println("------------------------------------------------------------");
            message[i].setFlag(Flags.Flag.DELETED,true);
         }
       folder.close(true);
       store.close();//关闭
     }
    catch(Exception ej2)
     {
        System.out.println(ej2);
     }
  }

解决方案 »

  1.   

    自己写一个程序解析eml文件的类,使用javamail你会碰到好多问题,比如中文的,字符间的转码等等
      

  2.   

    为什么part.getSize()取出来的附件大小比我的附件大?
      

  3.   

    wjmmml: 
    你给的代码里面下面这段中,编译不会出错,运行就会
    byte [] buffer = new byte[chunk];
    InputStream instream = part.getInputStream();
    instream.read(buffer,0,chunk);
    myFileoutputstream.write(buffer,0,chunk);
    instream.close();
      

  4.   

    能给我发一个吗? [email protected]
      

  5.   

    我的没有问题啊,我一直在用啊
    但是我发现一个新的问题,当
    String dis = part.getDisposition();为INLINE时,无法用part.getFileName()取出来附件名。谁处理过这样的问题?
    to:cxj_2000(多多呢?多多呢?啊!!!¥%#%……※) (  ) 
    怎么写解析程序,难度有多大,你写过吗?能否给参考一下。