Комментарии 6
Тело сообщения может содержать несколько вложенных друг в друга частей multipart. Сначала mixed, в нем alternative, в нем related. У Вас только пара вариантов писем обрабатывается в примере.
По-правде говоря, сам перебирал части рекурсивно, проверяя через getContentType, а не isMimeType. Завтра исправлю, спасибо.
Сомневаюсь, что рекурсия здесь нужна. Количество вариантов ограничено, и оно не большое.
Пример
if(content instanceof Multipart
&& ((Multipart)content).getContentType().startsWith("multipart/mixed"))
{
//get html part of message
Object body = ((Multipart)content).getBodyPart(0).getContent();
if(body instanceof Multipart
&& ((Multipart)body).getContentType().startsWith("multipart/alternative"))
{
//get alternative text
BodyPart altPart = ((Multipart)body).getBodyPart(0);
//get main part (html or related)
Object mainPart = ((Multipart)body).getBodyPart(1).getContent();
if(mainPart instanceof Multipart)
{
/*
* -mixed
* \-alternative (body)
* \-text
* |-related (mainPart)
* \-html
* |-attachment
* |-attachments
*/
//html
String html = (String) ((Multipart)mainPart).getBodyPart(0).getContent();
//related
...
}
else
{
/*
* -mixed
* \-alternative (body)
* \-text
* |-html
* |-attachments
*/
...
//html
String html = (String) ((Multipart)body).getBodyPart(1).getContent();
...
}
}
else if(body instanceof Multipart
&& ((Multipart)body).getContentType().startsWith("multipart/related"))
{
/*
* -mixed
* \-related (body)
* \-html
* |-attachment
* |-attachments
*/
//html
String html = (String) ((Multipart)body).getBodyPart(0).getContent();
...
}
else
{
/*
* -mixed
* \-html (body)
* |-attachments
*/
//html
String html = (String) ((Multipart)content).getBodyPart(0).getContent();
...
}
}
else
{
if(content instanceof Multipart
&& ((Multipart)content).getContentType().startsWith("multipart/alternative"))
{
//get alternative text
BodyPart altPart = ((Multipart)content).getBodyPart(0);
//get html part of message
Object body = ((Multipart)content).getBodyPart(1).getContent();
if(body instanceof Multipart)
{
/*
* -alternative (content)
* \-text
* |-related (body)
* \-html
* |-attachment
*/
//html
String html = (String) ((Multipart)body).getBodyPart(0).getContent();
...
}
else
{
/*
* -alternative (content)
* \-text
* |-html
*/
...
//html
String html = (String) ((Multipart)content).getBodyPart(1).getContent();
}
}
else if(content instanceof Multipart
&& ((Multipart)content).getContentType().startsWith("multipart/related"))
{
/*
* -related (content)
* \-html
* |-attachment
*/
//html
String html = (String) ((Multipart)content).getBodyPart(0).getContent();
...
}
else
{
/*
* -html (content)
*/
//html
String html = (String) content;
}
}
А если
так?
private void parseMultiparted(Multipart part){
for(int i = 0; i < part.getCount(); i ++)
parsePart(part.getBodyPart(i));
}
private void parsePart(BodyPart part){
String type = part.getContentType();
if(type.contains("multipart/"))
parseMultiparted((Multipart)part.getContent());
else if(type.contains("text/"))
System.out.println(part.getContent().toString());
else if(Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
System.out.println(MimeUtility.decodeText(part.getFileName()));
}
apache commons email не смотрели?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разбираем email в Java