2015-11-18 1 views
1

J'ai cherché et essayé ceci tellement longtemps j'ai besoin de votre aide. J'ai un serveur qui reçoit des emails HTML. Après cela, je veux en avoir les parties (en-tête, sujet et corps). Obtenir l'en-tête et le sujet n'est pas un problème, mais le contenu est.Obtenir le contenu de MimeMessage en tant que chaîne

Alors, voici le code où je reçois un SmtpMessage:

private SmsItem getEmailData(SmtpMessage msg) throws MessagingException, IOException { 
     String to = msg.getHeaderValue("To"); 
     String from = msg.getHeaderValue("From"); 
     String content = null; 
     LOG.info("Mail from: " + from + " to: " + to); 

     String toNr; 
     Pattern mobileNr = Pattern.compile("(\\+?[0-9]+)@*"); 
     Matcher matcher = mobileNr.matcher(to); 
     if (matcher.find()) { 
      toNr = Utils.processAddress(matcher.group(1)); 
     } else { 
      throw new RuntimeException("Illegal address to send SMS from mail: " + to); 
     } 

     Pattern fromMail = Pattern.compile("\\<+([[email protected]]*)\\>+"); 
     matcher = fromMail.matcher(from); 
     if(matcher.find()){ 
      from = matcher.group(1); 
      LOG.info(from); 
     }else{ 
      throw new RuntimeException("Ilegal From Address: " + from); 
     } 

Maintenant, je reçois le contenu lui-même:

Session s = Session.getDefaultInstance(new Properties()); 
     String ip = msg.toString(); 
     ip = MimeUtility.decodeText(ip); 
     InputStream is = new ByteArrayInputStream(ip.getBytes("ISO-8859-1")); 
     MimeMessage mi = new MimeMessage(s, is); 

     Object message = mi.getContent(); 
     String test = mi.getContent().toString(); 
     test.toString(); 

Maintenant, j'ai une chaîne qui ressemble à ceci: [email protected]

Mais quand je l'écris comme ceci:

((Multipart) message).writeTo(System.out); 

Je paie où je peux voir le contenu que je veux:

This is a multi-part message in MIME format.--------------010600010509000401060604Content-Type: text/plain; charset=utf-8; format=flowedContent-Transfer-Encoding: 7bit 
*asdasd ad asd asddfgdfgsdfsd:-)* 
    asdsad 
javax.mail.MessagingException: Empty multipart: multipart/alternative; 
    at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:548) 
    at ... 

Mais il ne peut pas avoir raison vide? Je suis en train de l'obtenir le contenu comme ça:

if (message instanceof String) 
     { 
      message = (String)message; 
      LOG.info("String"); 
     } 
     else if (message instanceof Multipart) 
     { 
      Multipart mp = (Multipart)message; 
      LOG.info("Count: " + mp.getCount() + mp.getParent() + test.toString()); 
      for (int i = 0; i < mp.getCount(); i++){ 
       LOG.info("Multipart"); 
       LOG.info(i + ". " + mp.getBodyPart(i).toString()); 
       BodyPart bp = mp.getBodyPart(i); 
       String dp = bp.getDisposition(); 

       if(dp != null){ 
        LOG.error("Something's wrong"); 
       }else if(dp.equalsIgnoreCase("ATTACHMENT")){ 
        LOG.error("Attachment dürfen nicht mitgegeben werden!"); 
       }else{ 
        content = bp.getContent().toString(); 
       } 
      } 
     } 

je vraiment besoin de ce fait et je suis à la recherche sur Internet pour les âges ..

Répondre

4

En utilisant commons-email vous pouvez obtenir le contenu comme suit

MimeMessageParser parser = new MimeMessageParser(yourMimeMessage); 
parser.parse(); 

String htmlContent = parser.getHtmlContent(); 
// or 
String plainContent = parser.getPlainContent(); 
+0

Ce serait une bonne idée merci. Mais il serait préférable de le faire avec les choses que j'ai – Sundaze

+0

Je ne reçois pas cette méthode sur l'ajout de commons-email à mon projet android avec gradle. J'ajoute ceci à mon projet: compile "commons-io: commons-io: +" –

+1

@DineshVG Ajoute l'email commun d'Apache Commons à vos dépendances. Voir: https://mvnrepository.com/artifact/org.apache.commons/commons-email/1.4 – Daniel

0

Vous pouvez utiliser Simple Java Mail pour convertir un MimeMessage à un objet e-mail et y accéder tout, y compris les pièces jointes et images incorporées, les destinataires, html, texte et les en-têtes:

Email email = EmailConverter.mimeMessageToEmail(mimeMessage); 

De là, vous pouvez facilement accéder à tous les différents éléments d'un e-mail.

enter image description here