À défaut d'analyser ce multi-partie de message mime corps en Java
Je ne suis pas l'écriture d'une application de courrier électronique, donc je n'ai pas accès à tous les en-têtes et ces. Tout ce que j'ai est quelque chose comme le bloc à la fin de cette question. J'ai essayé d'utiliser l'API JavaMail pour analyser ce, en utilisant quelque chose comme
Session s = Session.getDefaultInstance(new Properties());
InputStream is = new ByteArrayInputStream(<< String to parse >>);
MimeMessage message = new MimeMessage(s, is);
Multipart multipart = (Multipart) message.getContent();
Mais, il m'a juste dit que le message.getContent est une Chaîne de caractères, pas un Multipart ou MimeMultipart. De Plus, je n'ai pas vraiment besoin de tous les frais généraux de l'ensemble de l'API JavaMail, j'ai juste besoin d'analyser le texte dans ses parties. Voici un exemple:
C'est un multi-partie de message au format MIME.\n\n------=_NextPart_000_005D_01CC73D5.3BA43FB0\nContent-Type: text/plain;\n\tcharset="iso-8859-1"\nContent-Transfer-Encoding: quoted-printable\n\nStuff:\n\n Veuillez lire ce genre de choses au début de chaque semaine. =\nFeel libre d'en discuter tout au long de la semaine.\n\n\n--=20\n\retards. Suzy M. Smith\n555-555-5555\[email protected]\n------=_NextPart_000_005D_01CC73D5.3BA43FB0\nContent-Type: text/html;\n\tcharset="iso-8859-1"\nContent-Transfer-Encoding: quoted-printable\n\n\n\n\n\n\n\n\n\nStuff:
\n =20\nveuillez lire ce genre de choses au début de chaque =\nweek. Sentent=20\nfree à discuter tout au long de la semaine.
\n
--
Mme Suzy M. Smith
555-555-5555
[email protected]\n\n------=_NextPart_000_005D_01CC73D5.3BA43FB0--\n\n
OriginalL'auteur Bynan | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Il y a quelques choses de mal avec le texte que vous avez posté.
N'est pas valide en partie multi-mime. Découvrez wikipedia référence qui, bien que non-normative, est toujours correcte.
La limite mime n'est pas défini. Wikipédia exemple:
Content-Type: multipart/mixed; boundary="frontier"
montre que la limite est de "frontière". Dans votre exemple, "----=_NextPart_000_005D_01CC73D5.3BA43FB0", c'est la limite, mais qui ne peut être déterminé par l'analyse du texte (c'est à dire le mime est mal formé). Vous devez charger le bouffon qui passait le mime du contenu que vous avez aussi besoin de connaître le mime de valeur limite, qui n'est pas définie dans un en-tête de message. Si vous obtenez l'ensemble du corps du message, vous aurez assez, parce que le corps du message commence avecMIME-Version: 1.0
suivie parContent-Type: multipart/mixed; boundary="frontier"
où frontière sera remplacé par la valeur de la limite pour de l'encodage mime.Si la personne qui envoie le corps est un bouffon (modifié à partir de singe parce que le singe est trop porter de jugement de valeur - mon mauvais DwB), et à ne pas (plus probable ne sais pas comment) envoyer le corps, vous pouvez déduire la limite en analysant le texte de la ligne qui commence et se termine avec "--" (c'est à dire --limite--). Notez que j'ai mentionné une "ligne". Le terminal de la frontière est en fait "--limite--\n".
Enfin, les trucs qu'on a posté en 2 parties. La première partie semble définir des substitutions pour prendre place dans la deuxième partie. Si cela est vrai, le Type de Contenu: de la première partie doit probablement être quelque chose d'autre que "text/plain". Peut-être "de la société/substitution de la définition" ou quelque chose comme ça. Cela permettra à plusieurs (comme dans de futures améliorations) formats de substitution.
En mettant quelques infos du header dans comme vous l'avez suggéré, l'analyseur que vanje proposé ci-dessous a très bien fonctionné. Merci pour l'info. Je ne peux pas les +1 que vous, car je n'ai pas assez de rep...
OriginalL'auteur DwB
Début, j'ai eu votre message d'exemple et remplacé toutes les occurrences de
\n
avec des sauts de ligne et\t
avec des onglets.Ensuite, j'ai téléchargé les Bocaux de la Mime4J projet, un sous-projet de Apache James et à l'exécution de l'interface graphique d'analyse exemple
org.apache.james.mime4j.samples.tree.MessageTree
avec la transformation de message au-dessus de l'entrée. Et apparemment Mime4J a été en mesure d'analyser le message et d'en extraire le message HTML.J'ai mis quelques infos du header en tant que DwB suggéré ci-dessus, et MimeStreamParser.analyser fonctionne très bien maintenant. Merci pour l'info. Je ne peux pas les +1 que vous, car je n'ai pas assez de rep...
OriginalL'auteur vanje
Pouvez créer MimeMultipart de requête http.
Pour obtenir soumises par le formulaire paramètre besoin d'analyser les en-têtes de groupe musculaire:
OriginalL'auteur timtish
Si vous utilisez
javax.servlet.http.HttpServlet
pour recevoir le message, vous devrez utiliserHttpServletRequests.getHeaders
pour obtenir la valeur de l'en-tête HTTP content-type. Vous devrez alors utiliserorg.apache.james.mime4j.stream.MimeConfig.setHeadlessParsing
pour définir la MimeConfig avec les informations afin de pouvoir traiter correctement le message mime.Il semble que vous utilisez
HttpServletRequest.getInputStream
de lire le contenu de la demande. Le flux d'entrée est retourné seulement le contenu du message, après les en-têtes HTTP (terminée par une ligne vide). C'est pourquoi vous devez extraire le contenu-type des en-têtes HTTP et le nourrir à l'analyseur à l'aide de setHeadlessParsing.OriginalL'auteur Bradley Ross