2010-08-10 20 views
1

Il me semble l'extrait ci-dessous devrait fonctionner, mais "mp.getBodyPart (1) .getContent() toString()". Les retoursPourquoi ne puis-je pas analyser une pièce jointe javamail en utilisant toString?

[email protected]

au lieu du contenu de la pièce jointe.

public class GMailParser { 
    public String getParsedMessage(Message message) throws Exception { 
     try { 
      Multipart mp = (Multipart) message.getContent(); 
      String s = mp.getBodyPart(1).getContent().toString(); 
      if (s.contains("pattern 1")) { 
       return "return 1"; 
      } else if (s.contains("pattern 2")) { 
       return "return 2"; 
      } 
      ... 
+0

Voir cela aussi http://stackoverflow.com/questions/5628395/javamail-parsing-email-content-cant-seem-to-get-it-to-work-message-getcont/26142591# 26142591 – NoNaMe

Répondre

3

Cela signifie simplement que la classe BASE64DecoderStream ne fournit pas une définition toString personnalisée. La définition par défaut toString est d'afficher le nom de la classe + '@' + Hash Code, ce que vous voyez.

Pour obtenir le "contenu" du flux, vous devez utiliser la méthode read().

+0

Merci un million! Fonctionne maintenant. – jacknad

1

Ceci analyse les pièces jointes BASE64DecoderStream exactement comme nécessaire.

private String getParsedAttachment(BodyPart bp) throws Exception { 
    InputStream is = null; 
    ByteArrayOutputStream os = null; 
    try { 
     is = bp.getInputStream(); 
     os = new ByteArrayOutputStream(256); 
     int c = 0; 
     while ((c = is.read()) != -1) { 
      os.write(c); 
     } 
     String s = os.toString(); 
     if (s.contains("pattern 1")) { 
      return "return 1"; 
     } else if (s.contains("pattern 2")) { 
      return "return 2"; 
     } 
     ...