接收带附件的邮件

在带有附件的邮件中,消息的内容是Multipart型,这样我们就需要解析它来得到content和附件(它是发送带附件的邮件的逆向过程)。大家在使用outlook、foxmail这些电子邮件客户端的时候会发现,我们的邮件被从服务器上下载下来并且保存到本地硬盘上了,这种方式方便我们离线浏览邮件。
如何把服务器上的邮件保存到本地。如果有兴趣大家可以编写一个客户端的图形界面来读取保存下来的邮件。
在下面的例子里,向大家介绍如何解析附件。

private void getAttachFile(Part messagePart,BufferedOutputStream writeAttachObj) throws IOException, MessagingException { Object content = messagePart.getContent() ;
try
 {
  //这种情况下的邮件都是用multi模式发送的,
  // 这种模式包括有附件的邮件和用html表示content的邮件
  if (content instanceof Multipart)
  {
   Multipart contentTmp = (Multipart) content ;
   //如果是MULTI模式发送的,BodyPart(0).getContent()肯定就是content   
   System.out.println("content==" + contentTmp.getBodyPart(0).getContent()) ;
   //getCount()可以得到content中bodyPart的个数,content就是第一个
    //bodyPart,其它的附件按照顺序类推。但是有的时候附件就是另外一个邮件,
    //而这个邮件里边可能有其他的附件。下面代码用循环对嵌套情况进行解析。
  for (int i = 0 ; i < contentTmp.getCount() ; i++)
  {
   if (contentTmp.getBodyPart(i).isMimeType("multipart/*"))
   {
    Multipart multipart = (Multipart) contentTmp.getBodyPart(i).getContent() ;
    //这个地方增加循环是为了解决嵌套附件的情况。
   for (int k = 0 ; k < multipart.getCount() ; k++)
   {
    //content也会存在于INPUTSTREAM中。
    saveAttacheFile(multipart.getBodyPart(k).getContentType(), multipart.getBodyPart(k).getDisposition(), multipart.getBodyPart(k).getFileName(), multipart.getBodyPart(k).getInputStream(), writeAttachObj);
   }
  }
  else
  {
   saveAttacheFile(contentTmp.getBodyPart(i).getContentType(), contentTmp.getBodyPart(i).getDisposition(), contentTmp.getBodyPart(i).getFileName(), contentTmp.getBodyPart(i).getInputStream(), writeAttachObj);
   }
  }
 }
 //这种情况中邮件是纯文本形式,并且没有附件
 
 else
 {
  writeAttachObj.write(("content = "+content+"\r\n").getBytes()); writeAttachObj.flush();
  }
 }
 catch (Exception ie)
 {
  System.out.println("exception====" + ie.getMessage()) ;
 }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值