| | | 深入探讨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 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|