Manquant de démarrage limite d'Exception lors de la lecture des messages avec une pièce jointe de fichier

Je ne sais pas pourquoi je me fais de l'exception suivante lors de la lecture d'un mail avec une pièce jointe de fichier à partir du serveur de messagerie:

Exception in thread "main" javax.mail.MessagingException: Missing start boundary

        at javax.mail.internet.MimeMultipart.parsebm<MimeMultipart.java:872)
        at javax.mail.internet.MimeMultipart.parse<MimeMultipart.java:493)
        at javax.mail.internet.MimeMultipart.getCount<MimeMultipart.java:240)
        at GetParts.handleMultipart(GetParts.java:57)
        at GetParts.main(GetParts.java:42)

Le fichier que j'utilise pour lire ces messages est:

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];
//Get session
Properties props=new Properties();
props.put("mail.mime.multipart.ignoremissingboundaryparamete",true);
Session session = Session.getInstance(
props, null);
ContentType ct=new ContentType();
//Get the store
Store store = session.getStore("pop3");
store.connect(host, username, password);
//Get folder
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader (
new InputStreamReader(System.in));
//Get directory
Message message[] = folder.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": "
+ message[i].getFrom()[0] 
+ "\t" + message[i].getSubject());
//message[i].setHeader("Content-Type","multipart/mixed");
System.out.println("Do you want to get the content? [YES to read/QUIT to end]");
String line = reader.readLine();
if ("YES".equals(line)) {
Object content = message[i].getContent();
if (content instanceof Multipart) {
handleMultipart((Multipart)content);
} else {
handlePart(message[i]);
}
} else if ("QUIT".equals(line)) {
break;
}
}
//Close connection 
folder.close(false);
store.close();
}
public static void handleMultipart(Multipart multipart) 
throws MessagingException, IOException {
System.out.println(multipart.getCount());
for (int i=0, n=multipart.getCount(); i<n; i++) {
handlePart(multipart.getBodyPart(i));
}
}
public static void handlePart(Part part) 
throws MessagingException, IOException {
String disposition = part.getDisposition();
System.out.println("Disposition "+disposition);
String contentType = part.getContentType();
System.out.println("contentType "+contentType);
if (disposition == null) { //When just body
System.out.println("Null: "  + contentType);
//Check if plain
if ((contentType.length() >= 10) && 
(contentType.toLowerCase().substring(
0, 10).equals("text/plain"))) {
part.writeTo(System.out);
} else { //Don't think this will happen
System.out.println("Other body: " + contentType);
part.writeTo(System.out);
}
} else if (disposition.equalsIgnoreCase(Part.ATTACHMENT)) {
System.out.println("Attachment: " + part.getFileName() + 
" : " + contentType);
saveFile(part.getFileName(), part.getInputStream());
} else if (disposition.equalsIgnoreCase(Part.INLINE)) {
System.out.println("Inline: " + 
part.getFileName() + 
" : " + contentType);
saveFile(part.getFileName(), part.getInputStream());
} else {  //Should never happen
System.out.println("Other: " + disposition);
}
}
public static void saveFile(String filename,
InputStream input) throws IOException {
if (filename == null) {
filename = File.createTempFile("xx", ".out").getName();
}
//Do no overwrite existing file
File file = new File(filename);
for (int i=0; file.exists(); i++) {
file = new File(filename+i);
}
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream(input);
int aByte;
while ((aByte = bis.read()) != -1) {
bos.write(aByte);
}
bos.flush();
bos.close();
bis.close();
}
}
Post le message d'entrée de flux qui est à l'origine du problème (au moins jusqu'à la partie délimiteur)
Je ne pense pas qu'il devrait avoir de l'importance, mais vous avez raté le "r" en paramètre dans la ligne de props.put("mail.mime.multipart.ignoremissingboundaryparamete",true);

OriginalL'auteur Stardust | 2010-01-11