2010-04-20 18 views
5

J'utilise une petite bibliothèque smtp java (http://code.google.com/p/subethasmtp/), par ce que je dois analyser les e-mails entrants dans des composants séparés à savoir le corps, les pièces jointes, etc.pièce jointe l'analyse syntaxique via mime4j

Je suis en train d'utiliser mime4j, mais la documentation suggère que mime4j peut seulement donner une notification d'événement ou une notification de jeton et rien d'autre. Pour supprimer le corps et les pièces jointes, j'ai dû utiliser ma propre logique personnalisée dans les gestionnaires d'événements. Est-ce que mon observation est correcte?

Si oui alors comment puis-je utiliser mime4j pour mes besoins. Veuillez suggérer.

J'ai vraiment besoin d'une approche qui prenne en charge le flux de données smtp et qui me renvoie un tableau de références de pièces jointes ou de flux sous forme entièrement analysée dans java. S'il vous plaît aider.

Merci à l'avance

Sharma Ashish

+0

Pendant ce temps, sur l'auto-investigation, j'ai trouvé une bibliothèque perl MIME :: PARSER utilisée dans amavisd-new. Les gars de la liste de diffusion d'amavisd-new m'ont dit qu'un objet mail décodé comme ce dont j'ai besoin peut être référencé depuis le script amavisd-new perl, mais est-il possible que je puisse l'utiliser depuis perl vers java? –

+1

J'ai rencontré le même problème que vous et pendant que googling a remarqué votre nom partout (listes de diffusion, forums). Merci de m'avoir fait gagner du temps! –

Répondre

9

Mime4j peut certainement faire ce que vous avez besoin. Créez une sous-classe de org.apache.james.mime4j.message.SimpleContentHandler et implémentez la méthode bodyDecoded. Passez ensuite cette sous-classe dans une instance MimeStreamParser. Vous verrez que bodyDecoded est appelé une fois par corps ou par pièce jointe, et le flux qu'il contient contient les données avec le décodage Base64 ou Quoted-Printable déjà effectué.

Si vous n'aimez pas les API basées sur les événements en général, vous pouvez essayer la fonctionnalité plus semblable à DOM exposée via la classe org.apache.james.mime4j.message.Message. Vous pouvez appeler Message.getBody() et voir si ce qu'il vous renvoie est une instance de Multipart, TextBody, BinaryBody, etc. Si Multipart, alors vous pouvez appeler Multipart.getBodyParts pour recurse dans les sous-parties.

+0

merci pour la suggestion, maintenant je suis confronté à un problème dans la recréation des mails envoyés depuis iphone, les en-têtes ont "X-Mailer: iPhone Mail (7D11)", quelqu'un peut me dire quelle logique personnalisée je dois mettre en compte pour les mails envoyés via iphones. –

+0

Tous les problèmes résolus mime4j fonctionne beaucoup beaucoup mieux que java mail api. –

2

@Ashish l'autre option puisque vous utilisez SubEthaSmtp est de faire ce que gestionnaire Liste SubEtha Mail ne: http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

La classe liée étend SMTPMessage et qui a un tas de méthodes getPart(). javax.mail.Part a la plupart de ce dont vous avez besoin pour transformer une pièce jointe dans un fichier.

+0

Adam, Actuellement, j'utilise l'API de messagerie Java elle-même pour analyser le courrier électronique afin de supprimer le corps du message et les pièces jointes dans des fichiers distincts. Raison que je regarde sur mime4j est que api de courrier de Java échoue à la fois et n'est pas tolérant de faute pour les messages mime mal formatés (mon expérience) et mime4j promet que. Donc, comme une alternative, je cherche dans mime4j. Je publierai bientôt mes résultats détaillés. –

+0

Adam, mime4j est certainement une alternative bien meilleure à l'API de courrier de Java, il fournit une interface propre pour la mise en œuvre. Mes résultats de test avec mime4j (0.7) ont été excellents. –