打开邮件中的附件:
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();
//一下可以打印出内容,类别,存入文件等等,不详细写了,太多了
}
}
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();
//一下可以打印出内容,类别,存入文件等等,不详细写了,太多了
}
}
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, ...
}
...
}