2015-12-29 3 views
1

Мне нужно получить заголовки сообщений оригинального сообщения, отправленного из неподтвержденных писем.java - исходные заголовки сообщений из неподтвержденных писем

Цель: проверить, для которых почта ответ есть, для других почт я использую In-Reply-To и Message-ID связать их, но в случае недоставки почты изменения заголовка там в нет такой В ответе поле в заголовке. Если я смогу получить исходные заголовки сообщений, я думаю, что это облако будет разрешено.

Пример кода для того, что я сделал до сих пор

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(); 

ответ

1

Если вам повезет, «другой» SMTP возвратил их. В этом случае вы можете получить к ним доступ через 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 расширяет MimeMessage. Они есть. – Jan

+0

На самом деле я спрашивал, возвращает ли (content instanceof MultipartReport) false –

+0

Тогда это не правильный отскок от rfc. – Jan

Смежные вопросы