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
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
Vous devez vous connecter pour publier un commentaire.
J'ai juste eu le même problème. La limite est spécifiée dans le Multipart Type de Contenu. Vous trouverez plus d'informations dans ce source. Vous pouvez également regarder la personne de votre Message à l'aide de la
getContentType()
fonction. Dans mon cas, j'ai obtenu ce résultat:De sorte que le
getCount()
fonction utilise cette limite afin de séparer toutes les parties qui composent le en plusieurs parties. Regarde comme il pourrait y avoir des cas dans lesquels cette limite est endommagé.J'ai suivi ces instructions et tout fonctionne bien. J'ai ajouté le code ci-dessous:
Espère que cela aide!
OriginalL'auteur Jordi
essayer de régler le mode sur le multipartEntityBuilder
ex:
multipartEntityBuilder.setMode(HttpMultipartMode.RFC6532);
OriginalL'auteur Alex Metry