打开邮件中的附件:
import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class GetParts {
  public static void main(String args[]) throws Exception {
     String host = args[0];
     String username = args[1];
     String password = args[2];
     Session session = Session.getInstance(new Properties(), null);
     Store store = session.getStore("pop3");
     store.connect(host, username, password);
     Folder folder = store.getFolder("INBOX");
     folder.open(Folder.READ_ONLY);
     BufferedRead reader = new BufferedReader(new InputStreamReader(System.in));
     Message message[] = folder.getMessage();
     {
      //循环得到message[i].getFrom()[0];
       message[i].getSubject();
      Object content = message[i].getContent();
      if(content instanceof Multipart)
           handleMultipart((Multipart)content);
      else
           handlePart(message[i]);
      }
      folder.colse(false);
store.close();
}//end main
public static void handleMultipart(Multipart multipart) {
  //循环handlePart(multipart.getBodyPart(i));
}
public static void handlePart(Part part) {
 String disposition = part.getDisposition;
 String contentType = part.getContentType();
 //一下可以打印出内容,类别,存入文件等等,不详细写了,太多了
}
}

解决方案 »

  1.   

    附件的发送:  发送附件非常像转发消息。您建立各部分以组成完整消息。完成第一部件,即消息正文后,您添加其它部件,其中每个 DataHandler 都代表附件,而不是转发消息情况下的共享处理程序。如果从文件中读附件,附件的数据源是 FileDataSource。而如果从 URL 中读时,附件的数据源是 URLDataSource。一旦存在 DataSource,只要先把它传递给 DataHandler 构造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定您要保留附件的原始文件名,最终要做的是用 BodyPart 的 setFileName() 方法设置与附件相关的文件名。如下所示:  // Define message
     Message message = new MimeMessage(session);
     message.setFrom(new InternetAddress(from));
     message.addRecipient(Message.RecipientType.TO,
      new InternetAddress(to));
     message.setSubject("Hello JavaMail Attachment");  // Create the message part
     BodyPart messageBodyPart = new MimeBodyPart();  // Fill the message
     messageBodyPart.setText("Pardon Ideas");  Multipart multipart = new MimeMultipart();
     multipart.addBodyPart(messageBodyPart);  // Part two is attachment
     messageBodyPart = new MimeBodyPart();
     DataSource source = new FileDataSource(filename);
     messageBodyPart.setDataHandler(new DataHandler(source));
     messageBodyPart.setFileName(filename);
     multipart.addBodyPart(messageBodyPart);  // Put parts in message
     message.setContent(multipart);  // Send the message
     Transport.send(message);    就消息引入附件时,若程序是个 servlet (小服务程序),除告知消息发送到何处外,还必需上载附件。可以将 multipart/form-data 表单编码类型(form encoding type)用于每个上载文件的处理。 <FORM ENCTYPE="multipart/form-data"
      method=post action="/myservlet">
     <INPUT TYPE="file" NAME="thefile">
     <INPUT TYPE="submit" VALUE="Upload">
    </FORM>    注意:消息大小由 SMTP 服务器而不是 JavaMail API 来限制。如果您碰到问题,可以考虑用设置 ms 和 mx 参数的方法增大 Java 堆大小。   附件的获取:   从消息中获取附件比发送它们棘手些,因为 MIME 没有简单的关于附件的概念。当消息包含附件时,消息的内容是个 Multipart 对象。接着,您需要处理每个 Part,获取主要内容和附件。标有从 part.getDisposition() 获得的 Part.ATTACHMENT 配置(disposition)的部件(Part)无疑就是附件。但是,没有配置(以及一个非文本 MIME 类型)和带 Part.INLINE 配置的部件也可能是附件。当配置要么是 Part.ATTACHMENT,要么是 Part.INLINE 时,这个消息部件的内容就能被保存。只要用 getFileName() 和 getInputStream() 就能分别得到原始文件名和输入流。 Multipart mp = (Multipart)message.getContent();
    for (int i=0, n=multipart.getCount(); i<n; i++) {
     Part part = multipart.getBodyPart(i));
     String disposition = part.getDisposition();
     if ((disposition != null) &&
       ((disposition.equals(Part.ATTACHMENT) ||
         (disposition.equals(Part.INLINE))) {
      saveFile(part.getFileName(), part.getInputStream());
     }
    }    saveFile() 方法仅依据文件名创建了一个 File,它从输入流中将字节读出,然后写入到文件中。万一文件已经存在,就在文件名后添加一个数字作为新文件名,如果这个文件名仍存在,则继续添,直到找不到这样的文件名为止。 // from saveFile()
    File file = new File(filename);
    for (int i=0; file.exists(); i++) {
    file = new File(filename+i);
    }    上面的代码涵盖了最简单的情况 - 消息中各部件恰当的标记了。要涵盖所有情况,还要在配置为空时进行处理,并且获取部件的 MIME 类型来进行相应处理。 if (disposition == null) {
     // Check if plain
     MimeBodyPart mbp = (MimeBodyPart)part;
     if (mbp.isMimeType("text/plain")) {
      // Handle plain
     } else {
      // Special non-attachment cases here of image/gif, text/html, ...
     }
    ...
    }