您现在的位置是: 软件 > 开发者网络 > 程序方舟 > Java专栏 > 正文


-Win xp中的多种网络
-试验试验试验试验
-用Freehand实现位图矢量化
-网络电话面面观

深入探讨JavaMail API的使用
2001-07-03· ·郑伟··yesky

上一页  1 2 3 4  



  问题六:我的邮件中有一个附件,我怎么把它打开呢?

  说到邮件中的附件,我不得不说一说Multipart类,Multipart类是Message类的子类,提供了在邮件中加入附加的实现方法。一个多部分邮件是一个内容类型(content-type)被设置为multipart的Message对象。Multipart类是一个容器类,包含Bodypart类型的对象。Bodypart对象是一个Part接口的实例,它既包括一个新的Multipart容器对象,又包括一个DataHandler对象。

下图显示了一个Multipart邮件的结构。



下图显示了一个典型的Multipart邮件的嵌套



当邮件中有附件时,邮件的内容就是Multipart而不是我在前面所说的Part类型了。我们需要取得Multipart的每一部分并根据以需要和内容进行处理。现在让我们看一看在程序上是如何实现的:

import java.io.*;

import java.util.Properties;

import javax.mail.*;

import javax.mail.internet.*;

public class getAttachment{

public static void main(String args[])

{

String host=args[0];

String username=args[1];

String userpassword=args[2];

n=3;//为了简单起见,我默认第三封信为有附件的邮件

Session session =Session.getInstance(new Properties(),null);

Store store=session.getStore("pop3");

store.connect(host,username,userpassword);

Folder folder=store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);

Message message[]=folder.getMessage();

Object content=message[n].getContent();

if (content instanceof Multipart)

{

handleMultiPart((Multipart)content);

}

else

{

handlePart(message[n]);

}

folder.close();

store.close();

}



public static void handleMultiPart(Multipart multipart)

{

for(int i=0,i
{

handlePart(multipart.getBodyPart(i));

}

}



public static void handlePart(Part part)

{

String disposit=part.getDisposition();

String conType=part.getContentType();

if(disposit==null){//如果只有正文

System.out.println("没有:"+conType);

file://检查是否为普通邮件

if ((conType.length()>=10)&&(conType.toLowerCase().substring(0,10).equals("text/plain"))){

part.writeTo(System.out);

}

else {

file://可能为HTML格式的邮件,但是本文还不涉及这方面的内容故不予以考虑

System.out.println("其它各是的正文:"+conType);

part.writeTo(System.out);

}

}

else if (disposit.equals(Part.ATTACHMENT))//否则说明邮件中有附件

{

System.out.println("附件:"+part.getFileName()+:conType);

storeFile(part.getFileName(),part.getInputStream());

}

else {

System.out.println("其它:"+disposit);

}

}

public static void storeFile(String fileName,InputStream inputstream)//保存文件

{

File file=new File(fileName);

for(int i=0;file.exists();i++)

{

file= new File(fileName+i);

}

FileOutputStream fileoutputstream =new FileOutputStream(file);

BufferedOutputStream bufferedoutputstream =new BufferedOutputStream(fileoutputstream);

BufferedInputStream bufferedinputstream =new BufferedInputStream(BufferedInputStream);

int n;

while ((n=bufferedinputstream.read())!=-1)

{

bufferedoutputstream.write(n);

}

bufferedoutputstream.flush();

bufferedoutputstream.close();

bufferedinputstream.close();

}

}

本文用了一些问题和相应的解答,和大家探讨了JavaMail Api的使用方法,希望本文对大家的学习和工作有所帮助。


上一页  1 2 3 4  

■ 相关内容
 用JAVA实现线程等待提示框
 J2EE开发n层应用
 PHP自动更新新闻DIY
 ASP如何使用MYSQL数据库
 手把手教你使用VB来创建ASP组件
 Java多线程程序设计初步
 ASP.NET 入门的五个步骤
 WAP手机上的问卷调查系统的构建
 透过Orion开发J2EE应用程序
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!