2015-12-29 5 views
1

Je dois obtenir les en-têtes de message du message original envoyé par les mails non livrés.java - les en-têtes de message original des mails non livrés

Objectif: vérifier le courrier auquel la réponse est, pour les autres mails que je suis en utilisant In-Reply-To et Message-ID pour les rapporter mais en cas de courriels non livrés les changements d'en-tête, il ne par exemple In-Reply-To champ dans l'en-tête. Si je pouvais être en mesure d'obtenir des en-têtes de message d'origine, je pense que ce nuage sera résolu.

Exemple de code pour ce que je l'ai fait jusqu'à présent

Properties props = System.getProperties(); 
       props.put("mail.smtp.host", AppProperties.getInstance().getEmailHostName()); 
       props.put("mail.smtp.socketFactory.port", AppProperties.getInstance().getEmailSmtpSocketFactoryPort()); 
       props.put("mail.smtp.socketFactory.class", AppProperties.getInstance().getEmailSMTPSocketFactoryClass()); 
       props.put("mail.smtp.auth", AppProperties.getInstance().getEmailSmtpAuth()); 
       props.put("mail.smtp.port", AppProperties.getInstance().getEmailSmtpSocketFactoryPort()); 
       String userid = AppProperties.getInstance().getEmailId(); 
       String password = AppProperties.getInstance().getEmailPassword(); 

       Session session = Session.getInstance(props, null); 
       Store store = session.getStore("imaps"); 

       store.connect(props.getProperty("mail.smtp.host"), userid, password); 

       Folder inbox = (Folder) store.getFolder("INBOX"); 
       inbox.open(Folder.READ_WRITE); 
       FetchProfile profile = new FetchProfile(); 
       profile.add(FetchProfileItem.CONTENT_INFO); 
       profile.add("X-mailer"); 
       Message[] messages = inbox.getMessages(inbox.getMessageCount() - 10, inbox.getMessageCount()); 
       inbox.fetch(messages, profile); 


       for (Message message : messages) { 

    System.out.println(message.getHeader("Message-ID")[0]); 
    System.out.println(message.getHeader("In-Reply-To")[0]); 

       } 

       inbox.close(true); 

       store.close(); 

Répondre

1

Si vous êtes chanceux, « l'autre » smtp leur est revenu. Dans ce cas, vous pouvez y accéder via MultipartReport:

for (Message message : messages) { 
if(message instanceof MimeMessage) { 
    MimeMessage mime = (MimeMessage)message; 
    Object content = mime.getContent(); 
    if(content instanceof MultipartReport) { 
     MultipartReport dsn = (MultipartReport)content; 
     MimeMessage m = dsn.getReturnedMessage(); 
     if(m != null) { 
      // Tadaa - headers are here: 
      String originalMessageId = m.getMessageID(); 
     } 
    } 
} 
} 
+0

IMAPMessage étend MimeMessage. Elles sont. – Jan

+0

En fait, je demandais si (content instanceof MultipartReport) retourne false –

+0

Ensuite, ce n'est pas un rebond correct à partir de rfc. – Jan