2017-02-13 21 views
0

Кода для установки заголовковне удается получить пользовательские заголовки из нескольких частей сообщения в Java Mail

Message msg = new MimeMessage(session); 

if (fromName != null) { 
    addressFrom = new InternetAddress(fromAddress, fromName); 
} else { 
    addressFrom = new InternetAddress(fromAddress); 
} 

msg.setFrom(addressFrom); 

InternetAddress[] addressTo = new InternetAddress[1]; 

addressTo[0] = new InternetAddress(recipient.trim().replace(" ", "+")); 

msg.setRecipients(Message.RecipientType.TO, addressTo); 

msg.addFrom(InternetAddress.parse(from)); 

msg.setSubject(subject); 

InternetAddress[] replyTo = new InternetAddress[1]; 

replyTo[0] = new InternetAddress(replyAddress.trim().replace(" ", "+")); 

msg.setReplyTo(replyTo); 

Multipart multipart = new MimeMultipart("alternative"); 

if (plainMsg != null) { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    messageBodyPart.setContent(plainMsg, "text/plain ; charset=UTF-8"); 
    multipart.addBodyPart(messageBodyPart); 
} 

BodyPart messageBodyPart = new PreencodedMimeBodyPart("base64"); 
messageBodyPart.setHeader("charset", "utf-8"); 
messageBodyPart.setContent(htmlMsg, "text/html ; charset=UTF-8"); 
multipart.addBodyPart(messageBodyPart); 
msg.setContent(multipart); 
msg.setHeader("Precedence", "bulk"); 
msg.addHeader("trackerid", trackerId); 
msg.addHeader("emailMarketingid", emailMarketingid); 

Я добавил trackerid и emailMarketingid как header.They также появляться в заголовке сообщения GMAIL, но при выборке почтового ящика я не являюсь в состоянии получить эти заголовки. ниже код для извлечения заголовков -

   Object content = message.getContent(); 
       String line = null; 
       String bounceStatus = ""; 
       String bounceReason = ""; 
       String trackerid = ""; 
       String emailMarketingid = ""; 
       BufferedReader bufReader = null; 
       if (content instanceof String) { 
        bufReader = new BufferedReader(new StringReader(message.getContent().toString())); 
        while ((line = bufReader.readLine()) != null) { 
         if (line.contains("trackerid")) { 
          trackerid = line.split(":")[1]; 
         } 
         if (line.contains("emailMarketingid")) { 
          emailMarketingid = line.split(":")[1]; 
         } 
         bounceStatus = get_status_code_from_text(line, bounceStatus); 
         bounceReason = line; 
        } 
       } else if (content instanceof Multipart) { 
        MimeMultipart mp = (MimeMultipart) (Multipart) content; 
        for (int j = 0; j < mp.getCount(); j++) { 
         bufReader = new BufferedReader(new StringReader(getTextFromMimeMultipart(mp))); 
         while ((line = bufReader.readLine()) != null) { 
          if (line.contains("trackerid")) { 
           trackerid = line.split(":")[1]; 
          } 
          if (line.contains("emailMarketingid")) { 
           emailMarketingid = line.split(":")[1]; 
          } 
          bounceStatus = get_status_code_from_text(line, bounceStatus); 
          bounceReason = line; 
         } 
        } 
       } 


String result = ""; 
int count = mimeMultipart.getCount(); 
for (int i = 0; i < count; i++) { 
    BodyPart bodyPart = mimeMultipart.getBodyPart(i); 
    if (bodyPart.isMimeType("text/plain")) { 
     result = result + "\n" + bodyPart.getContent(); 
     break; // without break same text appears twice in my tests 
    } else if (bodyPart.isMimeType("text/html")) { 
     String html = (String) bodyPart.getContent(); 
     result = result + "\n" + org.jsoup.Jsoup.parse(html).text(); 
    }else if (bodyPart.isMimeType("multipart/alternative")) { 

     Multipart mp = (Multipart) bodyPart.getContent(); 
     int partsCount = mp.getCount(); 
     for(int j=0;j<partsCount;j++){ 
      result= result +(String) mp.getBodyPart(j).getContent(); 
      Enumeration e = mp.getBodyPart(j).getAllHeaders(); 
      while (e.hasMoreElements()) { 
       Header h = (Header) e.nextElement(); 
       System.out.println("Name : " + h.getName() + " Value : " + h.getValue()); 
      } 
     } 
    }else if (bodyPart.isMimeType("multipart/mixed")) { 

     Multipart mp = (Multipart) bodyPart.getContent(); 
     int partsCount = mp.getCount(); 
     result= result +(String) mp.getBodyPart(partsCount - 1).getContent(); 

    }else if (bodyPart.getContent() instanceof MimeMultipart) { 
     result = result + getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent()); 
    } 
} 

ответ

0

Заголовки не в содержании сообщения. Используйте метод getHeader для чтения заголовков.

+0

уже попробовал метод getHeader который дает нулевое значение – user3816288

+0

Что делает [JavaMail отладочный] (http://www.oracle .com/technetwork/java/javamail/faq/index.html # debug) показать, когда вы используете getHeader? Если вы используете 'msg.writeTo (новый FileOutputStream (" msg.txt ")),' вы видите заголовок в файле msg.txt? –

0

Попробуйте перечислить заголовок для всех типов многостраничного содержимого.

bodyPart.isMimeType ("многочастный/*")

Enumeration headers = part.getAllHeaders(); 
while (headers.hasMoreElements()) { 
    Header h = (Header) headers.nextElement(); 
     if ("trackerid".equals(h.getName())) { 
      log.info(h.getName() + ": " + h.getValue()); 
     } 
    } 

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

  • Нет связанных вопросов^_^