Ricevo email da un client in cui hanno annidato un messaggio multipart/alternativo all'interno di un messaggio multipart/mixed. Quando ottengo il corpo del messaggio restituisce il livello multipart/alternativo quando quello che voglio veramente è la parte text/html che è contenuta nella multipart/alternativa.Analisi multiparto/misto con corpo multipart/alternativo in java
Ho guardato attraverso i javadoc per javax.mail e non riesco a trovare un modo semplice per ottenere il corpo di una parte corporea che è a sua volta multipart o saltare la prima parte multipart/mista e andare nella multipart/corpo alternativo per leggere il testo/html e testo/pezzi semplici.
La struttura email si presenta come questo:
...
Content-Type: multipart/mixed;
boundary="----=_Part_19487_1145362154.1418138792683"
------=_Part_19487_1145362154.1418138792683
Content-Type: multipart/alternative;
boundary="----=_Part_19486_1391901275.1418138792683"
------=_Part_19486_1391901275.1418138792683
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-8859-1
...
------=_Part_19486_1391901275.1418138792683
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset=ISO-8859-1
...
------=_Part_19486_1391901275.1418138792683--
------=_Part_19487_1145362154.1418138792683--
Questa è una descrizione dei codice utilizzato per analizzare i messaggi di posta elettronica:
Message [] found = fldr.search(searchCondition);
for (int i = 0; i < found.length; i++) {
Message m = found[i];
Object o = m.getContent();
if (o instanceof Multipart) {
log.info("**This is a Multipart Message. ");
Multipart mp = (Multipart)o;
log.info("The Multipart message has " + mp.getCount() + " parts.");
for (int j = 0; j < mp.getCount(); j++) {
BodyPart b = mp.getBodyPart(j);
// Loop if the content type is multipart then get the content that is in that part,
// make it the new container and restart the loop in that part of the message.
if (b.getContentType().contains("multipart")) {
mp = (Multipart)b.getContent();
j = 0;
continue;
}
log.info("This content type is " + b.getContentType());
if(!b.getContentType().contains("text/html")) {
continue;
}
Object o2 = b.getContent();
if (o2 instanceof String) {
<do things with content here>
}
}
}
}
sembra mantenere fermandosi al secondo contorno e non parsing qualsiasi altra cosa Nel caso del messaggio sopra, si ferma a boundary = "---- = _ Part_19486_1391901275.1418138792683" e non arriva mai al testo del messaggio.
Cosa significa 'log.info (" Questo tipo di contenuto è "+ b.getContentType());' fornire? – ToYonos
"Questo tipo di contenuto è multipart/alternativo;" Quando funziona dice "Questo tipo di contenuto è text/html; charset = ISO-8859-1" –
Ogni volta, per ogni ciclo di svolta? – ToYonos