La méthode getContent()
de javax.Part
renvoie
le contenu comme un objet Java. Le type de l'objet retourné est bien sûr en fonction du contenu lui-même. Pour par exemple, l'objet renvoyé pour "texte/brut" contenu est généralement un objet chaîne . L'objet renvoyé pour un contenu "multipart" est toujours une sous-classe Multipart.
Voir http://download.oracle.com/javaee/6/api/javax/mail/Part.html#getContent%28%29
Si un Message
(qui est un Part
) contient des pièces jointes, la méthode getContent renverra un objet Multipart
. En outre, vous pouvez connaître le type MIME de la pièce avec getContentType
.
L'information qui manque dans la documentation est que cet objet MultiPart
retourné par getContent
est juste une représentation vide de la structure du message. Le contenu de chaque Part
du Multipart
sera uniquement récupéré sur le serveur lorsque vous le demanderez spécifiquement. Par exemple, pour analyser un Message
multipart vous feriez:
if(p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
// the content was not fetched from the server
// parse each Part
for (int i = 0; i < mp.getCount(); i++) {
Part inner_part = mp.getBodyPart(i)
if(inner_part.isMimeType("text/plain")) {
String text = inner_part.getText();
// the content of this Part was fetched from the server
}
}
}
Autre chose à considérer est que pour une performance optimale, vous devriez obtenir les informations de structure du corps à partir du serveur en lots pour la collecte des messages que vous souhaitez analyser (voir http://download.oracle.com/javaee/6/api/javax/mail/FetchProfile.Item.html#CONTENT_INFO). Dans le cas contraire, chaque
Multipart mp = (Multipart)p.getContent();
se traduira par une demande au serveur pour récupérer la structure du corps. Si l'approche FetchProfile
est utilisée, la structure du corps pour la collecte des messages sera récupérée avec une seule requête. Vous pouvez voir les requêtes au serveur dans le journal si vous activez le mode de débogage sur la session:
session.setDebug(true);
Cela dit, pour obtenir la taille et les noms de fichiers de pièces jointes utilisent juste Part.getSize()
et Part.getFileName()
, respectivement.