Метод getContent()
из javax.Part
возвращает
содержимое как объект Java. Тип
возвращенного объекта, конечно,
зависит от самого контента. За
Например, объект возвращен для
«текст / простой» контент обычно
Строковый объект. Объект возвращен для
«Составной» контент всегда
Составной подкласс.
См. http://download.oracle.com/javaee/6/api/javax/mail/Part.html#getContent%28%29
Если Message
(то есть Part
) содержит вложения, метод getContent вернет объект Multipart
. Кроме того, вы можете узнать MIME-тип детали с помощью getContentType
.
Информация, которая отсутствует в документации, заключается в том, что этот MultiPart
объект, возвращаемый getContent
, является просто пустым представлением структуры сообщения. Содержимое каждого Part
Multipart
будет извлекаться с сервера, только если вы специально запросите его. Например, чтобы разобрать составную часть Message
, вы должны сделать:
if( p.isMimeType("multipart/*") ) {
Multipart mp = (Multipart)p.getContent();
// the content was not fetched from the server
// parse each Part
for (int i = 0; i < mp.getCount(); i++) {
Part inner_part = mp.getBodyPart(i)
if( inner_part.isMimeType("text/plain") ) {
String text = inner_part.getText();
// the content of this Part was fetched from the server
}
}
}
Что еще нужно учитывать, это то, что для оптимальной производительности вы должны получать информацию о структуре тела от сервера в пакете для сбора сообщений, которые вы хотите проанализировать (см. http://download.oracle.com/javaee/6/api/javax/mail/FetchProfile.Item.html#CONTENT_INFO). Если нет, каждый
Multipart mp = (Multipart)p.getContent();
приведет к запросу сервера на получение структуры тела. Если используется подход FetchProfile
, структура тела для сбора сообщений будет извлечена только с одним запросом. Вы можете увидеть запросы к серверу в журнале, если активируете режим отладки в сеансе:
session.setDebug(true);
При этом для получения размера и имен файлов вложений просто используйте Part.getSize()
и Part.getFileName()
соответственно.