Pull to refresh

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

Раньше не видел, посмотрел. Судя по примерам, сделали более компактную передачу параметров и вложений при отправке писем.
Sign up to leave a comment.

Articles