快速业务通道

用JavaMail发送带附件的Email - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
如何具体解析content的操作我就不赘述了,我现在给出如何把修改好的content发送出去的例子。

//对于发送html类型的content,里边包括图片。

for(int i=0;i<_mailContent.getImgHash().size();i++) {   MimeBodyPart mbp1 = new MimeBodyPart();   //得到图片的数据   FileDataSource fds = new FileDataSource( (String)_mailContent.getImgHash().get("IMG"+i));   //设置到MimeBodyPart中   mbp1.setDataHandler(new DataHandler(fds));   //设置图片附件和html的对应关系   mbp1.setHeader("Content-ID","IMG"+i);   mp.addBodyPart(mbp1); }

3.邮件的状态

我们在阅读完邮件后可以给邮件设置删除标志,然后在关闭FOLDER的时候用true来清空已经被标志为删除的邮件。邮件的状态是在类FLAGS.FLAG中定义的。包括如下几种:

Flags.Flag.ANSWERED Flags.Flag.DELETED Flags.Flag.DRAFT Flags.Flag.FLAGGED Flags.Flag.RECENT Flags.Flag.SEEN Flags.Flag.USER

我们可以根据不同的需要进行设置,但是需要注意的是,不是所有的服务器都支持这些状态。我们在做操作之前可以用getPermanentFlags方法来得到Message中的状态。参考下面代码

Message m = folder.getMessage(1); // set the DELETED flag m.setFlag(Flags.Flag.DELETED, true); // Check if DELETED flag is set of this message if (m.isSet(Flags.Flag.DELETED))   System.out.println("DELETED message");   // Examine ALL system flags for this message Flags flags = m.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); for (int i = 0; i < sf.length; i++) {   if (sf[i] == Flags.Flag.DELETED)    System.out.println("DELETED message");   else if (sf[i] == Flags.Flag.SEEN)    System.out.println("SEEN message"); }

用JavaMail发送带附件的Email(3)

时间:2010-12-13

4.接收带附件的邮件

在带有附件的邮件中,消息的内容是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/*"))     {      Multipa

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号